Author: clement
Date: Sat Jan 15 18:15:59 2011
New Revision: 1059383

URL: http://svn.apache.org/viewvc?rev=1059383&view=rev
Log:
Fix FELIX-2781 Expose the implementation class as service when no interfaces 
are found in the hierachy

Update the changelog
Add tests to check FELIX-2781

Added:
    
felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/SimpleClass.java
Modified:
    felix/trunk/ipojo/core/doc/changelog.txt
    
felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
    
felix/trunk/ipojo/tests/core/service-providing/src/main/ipojo/concrete-abstract.xml
    
felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/SimplePS.java

Modified: felix/trunk/ipojo/core/doc/changelog.txt
URL: 
http://svn.apache.org/viewvc/felix/trunk/ipojo/core/doc/changelog.txt?rev=1059383&r1=1059382&r2=1059383&view=diff
==============================================================================
--- felix/trunk/ipojo/core/doc/changelog.txt (original)
+++ felix/trunk/ipojo/core/doc/changelog.txt Sat Jan 15 18:15:59 2011
@@ -5,6 +5,7 @@ Changes from the 1.6.8 to 1.8.0
     * [FELIX-2716] - [iPOJO] Failure when creating proxies for classes in 
java.* packages
 
 ** Improvement
+    * [FELIX-2781] - Expose the implementation class as service when no 
interfaces are found in the hierarchy
     * [FELIX-1424] - Constructor Injection
     * [FELIX-1428] - Constructor injection of Configuration properties
     * [FELIX-2461] - Allow specifying the targeted service interface in the 
@ServiceController

Modified: 
felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java?rev=1059383&r1=1059382&r2=1059383&view=diff
==============================================================================
--- 
felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
 (original)
+++ 
felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
 Sat Jan 15 18:15:59 2011
@@ -596,7 +596,8 @@ public class ProvidedServiceHandler exte
             }
 
             if (all.isEmpty()) {
-                throw new ConfigurationException("Service Providing: Cannot 
instantiate a provided service : no specifications found (no interfaces 
implemented by the pojo)");
+               warn("No service interface found in the class hierarchy, use 
the implementation class");
+                all.add(desc.getFactory().getClassName());
             }
 
             StringBuffer specs = null;

Modified: 
felix/trunk/ipojo/tests/core/service-providing/src/main/ipojo/concrete-abstract.xml
URL: 
http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-providing/src/main/ipojo/concrete-abstract.xml?rev=1059383&r1=1059382&r2=1059383&view=diff
==============================================================================
--- 
felix/trunk/ipojo/tests/core/service-providing/src/main/ipojo/concrete-abstract.xml
 (original)
+++ 
felix/trunk/ipojo/tests/core/service-providing/src/main/ipojo/concrete-abstract.xml
 Sat Jan 15 18:15:59 2011
@@ -25,4 +25,9 @@
         <provides 
specifications="[org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessParentImplementation,
 org.apache.felix.ipojo.test.scenarios.ps.service.FooService]"/>
     </component>
 
+       <component
+       classname="org.apache.felix.ipojo.test.scenarios.component.SimpleClass">
+               <provides/>
+       </component>
+
 </ipojo>

Added: 
felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/SimpleClass.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/SimpleClass.java?rev=1059383&view=auto
==============================================================================
--- 
felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/SimpleClass.java
 (added)
+++ 
felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/SimpleClass.java
 Sat Jan 15 18:15:59 2011
@@ -0,0 +1,11 @@
+package org.apache.felix.ipojo.test.scenarios.component;
+
+public class SimpleClass {
+
+       // This class do not implement any interface, it will be exposed as 
SimpleClass
+
+       public String hello() {
+               return "Hello";
+       }
+
+}

Modified: 
felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/SimplePS.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/SimplePS.java?rev=1059383&r1=1059382&r2=1059383&view=diff
==============================================================================
--- 
felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/SimplePS.java
 (original)
+++ 
felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/SimplePS.java
 Sat Jan 15 18:15:59 2011
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -18,50 +18,62 @@
  */
 package org.apache.felix.ipojo.test.scenarios.ps;
 
+import org.apache.felix.ipojo.ComponentInstance;
 import org.apache.felix.ipojo.Factory;
 import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
 import org.apache.felix.ipojo.junit4osgi.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.scenarios.component.SimpleClass;
 import org.apache.felix.ipojo.test.scenarios.ps.service.FooService;
 import org.osgi.framework.ServiceReference;
 
 public class SimplePS extends OSGiTestCase {
-       
+
        public void testPS() {
            IPOJOHelper helper = new IPOJOHelper(this);
-           
+
                String factName = "PS-FooProviderType-1";
                String compName = "FooProvider-1";
                ServiceReference ref = null;
-               
+
                // Check that no Foo Service are available
                ref = getServiceReference(FooService.class.getName());
-               
+
                assertNull("FS already available", ref);
-       
+
                // Get the factory to create a component instance
                Factory fact = helper.getFactory(factName);
                assertNotNull("Cannot find the factory FooProvider-1", fact);
-               
+
                helper.createComponentInstance(factName, compName);
-               
+
                // Get a FooService provider
                ref = getServiceReference(FooService.class.getName(), "(" + 
"instance.name" + "=" + compName + ")");
 
                assertNotNull("FS not available", ref);
-               
+
                // Test foo invocation
                FooService fs = (FooService) getServiceObject(ref);
                assertTrue("FooService invocation failed", fs.foo());
-               
+
                helper.dispose();
 
-               
+
                // Check that there is no more FooService
                ref = getServiceReference(FooService.class.getName(), null);
-               
-               
+
+
                assertNull("FS available, but component instance stopped", ref);
-               
+
+       }
+
+       public void testWhenNoInterface() {
+               IPOJOHelper helper = new IPOJOHelper(this);
+               String factoryName = 
"org.apache.felix.ipojo.test.scenarios.component.SimpleClass";
+               ComponentInstance ci = 
helper.createComponentInstance(factoryName);
+               waitForService(SimpleClass.class.getName(), null, 5000);
+               SimpleClass simple = (SimpleClass) 
getServiceObject(SimpleClass.class.getName(), null);
+               assertEquals("Hello", simple.hello());
+               ci.dispose();
        }
 
 }


Reply via email to