You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by gn...@apache.org on 2009/07/02 16:52:06 UTC

svn commit: r790607 - /geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceRecipe.java

Author: gnodet
Date: Thu Jul  2 14:52:06 2009
New Revision: 790607

URL: http://svn.apache.org/viewvc?rev=790607&view=rev
Log:
Make additional tests on the interfaces implemented by the service

Modified:
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceRecipe.java

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceRecipe.java?rev=790607&r1=790606&r2=790607&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceRecipe.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceRecipe.java Thu Jul  2 14:52:06 2009
@@ -257,6 +257,7 @@
             }
         }
         Object service = this.service;
+        // We need the real service ...
         if (bundle != null) {
             if (service instanceof ServiceFactory) {
                 service = ((ServiceFactory) service).getService(bundle, registration);
@@ -268,20 +269,31 @@
                 throw new IllegalStateException("service is null");
             }
             // Check if the service actually implement all the requested interfaces
-            if (metadata.getAutoExport() == ServiceMetadata.AUTO_EXPORT_DISABLED) {
-                Set<String> allClasses = new HashSet<String>();
-                ReflectionUtils.getSuperClasses(allClasses, service.getClass());
-                ReflectionUtils.getImplementedInterfaces(allClasses, service.getClass());
-                Set<String> classes = getClasses();
-                classes.removeAll(allClasses);
-                if (!classes.isEmpty()) {
-                    throw new ComponentDefinitionException("The service implementation does not implement the required interfaces: " + classes);
-                }
-            }
+            validateClasses(service);
+        // We're not really interested in the service, but perform some sanity checks nonetheless
+        } else {
+             if (!(service instanceof ServiceFactory)) {
+                 // Check if the service actually implement all the requested interfaces
+                 validateClasses(service);
+             }
         }
         return service;
     }
 
+    private void validateClasses(Object service) {
+        // Check if the service actually implement all the requested interfaces
+        if (metadata.getAutoExport() == ServiceMetadata.AUTO_EXPORT_DISABLED) {
+            Set<String> allClasses = new HashSet<String>();
+            ReflectionUtils.getSuperClasses(allClasses, service.getClass());
+            ReflectionUtils.getImplementedInterfaces(allClasses, service.getClass());
+            Set<String> classes = getClasses();
+            classes.removeAll(allClasses);
+            if (!classes.isEmpty()) {
+                throw new ComponentDefinitionException("The service implementation does not implement the required interfaces: " + classes);
+            }
+        }
+    }
+
     public synchronized Object getService(Bundle bundle, ServiceRegistration registration) {
         return internalGetService(bundle, registration);
     }