Author: antelder
Date: Wed Feb 23 12:42:38 2011
New Revision: 1073721

URL: http://svn.apache.org/viewvc?rev=1073721&view=rev
Log:
Handle the case where the sca service type attribute is not specified. I'm 
going to raise a spec querry about the bean improspection rules in this 
situation

Modified:
    
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java

Modified: 
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java?rev=1073721&r1=1073720&r2=1073721&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java
 Wed Feb 23 12:42:38 2011
@@ -49,6 +49,7 @@ import org.apache.tuscany.sca.assembly.M
 import org.apache.tuscany.sca.assembly.Property;
 import org.apache.tuscany.sca.assembly.Reference;
 import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.common.java.reflection.JavaIntrospectionHelper;
 import org.apache.tuscany.sca.contribution.Artifact;
 import org.apache.tuscany.sca.contribution.ContributionFactory;
 import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
@@ -81,6 +82,7 @@ import org.apache.tuscany.sca.monitor.Pr
 import org.apache.tuscany.sca.policy.Intent;
 import org.apache.tuscany.sca.policy.PolicyFactory;
 import org.apache.tuscany.sca.policy.PolicySet;
+import org.oasisopen.sca.annotation.Remotable;
 
 /**
  * Introspects a Spring XML application-context configuration file to create 
<implementation-spring../>
@@ -99,6 +101,8 @@ public class SpringXMLComponentTypeLoade
     private SpringBeanIntrospector beanIntrospector;
 
     private SpringXMLBeanDefinitionLoader xmlBeanDefinitionLoader;
+    
+    private JavaIntrospectionHelper javaIntrospectionHelper;
 
     public SpringXMLComponentTypeLoader(ExtensionPointRegistry registry) {
         super();
@@ -110,6 +114,7 @@ public class SpringXMLComponentTypeLoade
         this.contributionFactory = 
factories.getFactory(ContributionFactory.class);
         this.xmlBeanDefinitionLoader =
             
registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(SpringXMLBeanDefinitionLoader.class);
+        this.javaIntrospectionHelper = 
JavaIntrospectionHelper.getInstance(registry);
     }
 
     /**
@@ -340,7 +345,14 @@ public class SpringXMLComponentTypeLoade
             Iterator<SpringSCAServiceElement> its = services.iterator();
             while (its.hasNext()) {
                 SpringSCAServiceElement serviceElement = its.next();
-                Class<?> interfaze = resolveClass(resolver, 
serviceElement.getType(), context);
+
+                Class<?> interfaze;
+                if (serviceElement.getType() != null) {
+                    interfaze = resolveClass(resolver, 
serviceElement.getType(), context);
+                } else {
+                    interfaze = getBeanInterface(resolver, 
serviceElement.getTarget(), beans, context);
+                }
+                
                 Service theService = createService(interfaze, 
serviceElement.getName());
                 // Spring allows duplication of bean definitions in multiple 
context scenario,
                 // in such cases, the latest bean definition overrides the 
older ones, hence 
@@ -594,7 +606,31 @@ public class SpringXMLComponentTypeLoade
         return;
     } // end method generateComponentType
 
-    /*
+    private Class<?> getBeanInterface(ModelResolver resolver, String target, 
List<SpringBeanElement> beans, ProcessorContext context) throws 
ClassNotFoundException {
+       SpringBeanElement bean = null;
+       for (SpringBeanElement sbe : beans) {
+               if (sbe.getId().equals(target)) {
+                       bean = sbe;
+                       break;
+               }
+       }
+       if (bean == null) {
+               error(context.getMonitor(), "TargetBeanDoesNotExist", null, 
target);
+               return null;
+       }
+       
+        Class<?> beanClass = resolveClass(resolver, bean.getClassName(), 
context);
+        Set<Class<?>> ifaces = 
javaIntrospectionHelper.getAllInterfaces(beanClass);
+        for (Class<?> interfaze : ifaces) {
+            if (interfaze.isAnnotationPresent(Remotable.class)) {
+               return interfaze;       
+            }
+        }
+
+        return beanClass;
+       }
+
+       /*
      * Determines whether a reference attribute of a Spring property element 
is resolved either
      * by a bean in the application context or by an SCA reference element or 
by an SCA property
      * element


Reply via email to