You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jm...@apache.org on 2006/05/02 08:49:06 UTC

svn commit: r398828 - in /incubator/tuscany/java/sca: bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/ bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/builder/ containers/container.java/src/main/j...

Author: jmarino
Date: Mon May  1 23:49:04 2006
New Revision: 398828

URL: http://svn.apache.org/viewcvs?rev=398828&view=rev
Log:
refactor entrypoint and external service API to reflect generics has opposed to having subclasses implement handlesTargetType

Added:
    incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperFoo.java
    incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperFooImpl.java
    incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperSuperFoo.java
    incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperSuperFooImpl.java
    incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/ContextFactorySupportTestCase.java
      - copied, changed from r398774, incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/GenericReflectionTestCase.java
    incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/EntryPointBuilderSupportTestCase.java
    incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/ExternalServiceBuilderSupportTestCase.java
Removed:
    incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/GenericReflectionTestCase.java
Modified:
    incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/ExternalWebServiceBuilder.java
    incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/ExternalWebServiceWireBuilder.java
    incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/WebServiceEntryPointBuilder.java
    incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/builder/JSONRPCEntryPointBuilder.java
    incubator/tuscany/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaTargetWireBuilder.java
    incubator/tuscany/java/sca/containers/container.java/src/main/resources/system.fragment
    incubator/tuscany/java/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/integration/HelloWorldMCTestCase.java
    incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptTargetWireBuilder.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/AbstractModuleComponentConfigurationLoader.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/processor/ServiceProcessor.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/ExternalServiceContext.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/EntryPointBuilderSupport.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/ExternalServiceBuilderSupport.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/WireBuilderSupport.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/injection/AutowireObjectFactory.java
    incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/CoreAnnotationsProcessingTestCase.java
    incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/WireBuilderSupportTestCase.java

Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/ExternalWebServiceBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/ExternalWebServiceBuilder.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/ExternalWebServiceBuilder.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/ExternalWebServiceBuilder.java Mon May  1 23:49:04 2006
@@ -19,10 +19,10 @@
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
-
 import javax.wsdl.Definition;
 import javax.xml.namespace.QName;
 
+import commonj.sdo.helper.TypeHelper;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
@@ -30,7 +30,6 @@
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContextConstants;
 import org.apache.axis2.description.AxisService;
-import org.apache.tuscany.binding.axis2.assembly.WebServiceBinding;
 import org.apache.tuscany.binding.axis2.config.WSExternalServiceContextFactory;
 import org.apache.tuscany.binding.axis2.handler.Axis2OperationInvoker;
 import org.apache.tuscany.binding.axis2.handler.Axis2ServiceInvoker;
@@ -38,28 +37,22 @@
 import org.apache.tuscany.binding.axis2.util.DataBinding;
 import org.apache.tuscany.binding.axis2.util.SDODataBinding;
 import org.apache.tuscany.binding.axis2.util.TuscanyAxisConfigurator;
+import org.apache.tuscany.binding.axis2.assembly.WebServiceBinding;
 import org.apache.tuscany.core.builder.BuilderConfigException;
 import org.apache.tuscany.core.builder.impl.ExternalServiceContextFactory;
 import org.apache.tuscany.core.extension.ExternalServiceBuilderSupport;
 import org.apache.tuscany.core.injection.SingletonObjectFactory;
-import org.apache.tuscany.model.assembly.Binding;
 import org.apache.tuscany.model.assembly.ExternalService;
 import org.apache.ws.commons.om.OMAbstractFactory;
 import org.apache.ws.commons.soap.SOAPFactory;
 import org.osoa.sca.annotations.Scope;
 
-import commonj.sdo.helper.TypeHelper;
-
 /**
- * Creates a <code>ContextFactory</code> for an external service configured with the {@link WebServiceBinding}
+ * Creates a <code>ContextFactory</code> for an external service configured with the {@link
+ * WebServiceBinding}
  */
 @Scope("MODULE")
-public class ExternalWebServiceBuilder extends ExternalServiceBuilderSupport {
-
-    @Override
-    protected boolean handlesBindingType(Binding binding) {
-        return binding instanceof WebServiceBinding;
-    }
+public class ExternalWebServiceBuilder extends ExternalServiceBuilderSupport<WebServiceBinding> {
 
     /*
      * (non-Javadoc)

Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/ExternalWebServiceWireBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/ExternalWebServiceWireBuilder.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/ExternalWebServiceWireBuilder.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/ExternalWebServiceWireBuilder.java Mon May  1 23:49:04 2006
@@ -27,15 +27,7 @@
 import org.osoa.sca.annotations.Scope;
 
 @Scope("MODULE")
-public class ExternalWebServiceWireBuilder extends WireBuilderSupport {
-
-    public ExternalWebServiceWireBuilder() {
-    }
-
-    @Override
-    protected boolean handlesTargetType(Class targetType) {
-        return WSExternalServiceContextFactory.class.isAssignableFrom(targetType);
-    }
+public class ExternalWebServiceWireBuilder extends WireBuilderSupport<WSExternalServiceContextFactory> {
 
     @Override
     protected TargetInvoker createInvoker(QualifiedName targetName, Method operation, ScopeContext context, boolean downScope) {

Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/WebServiceEntryPointBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/WebServiceEntryPointBuilder.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/WebServiceEntryPointBuilder.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/builder/WebServiceEntryPointBuilder.java Mon May  1 23:49:04 2006
@@ -21,21 +21,16 @@
 import org.apache.tuscany.core.builder.impl.EntryPointContextFactory;
 import org.apache.tuscany.core.extension.EntryPointBuilderSupport;
 import org.apache.tuscany.core.message.MessageFactory;
-import org.apache.tuscany.model.assembly.Binding;
 import org.apache.tuscany.model.assembly.EntryPoint;
 import org.osoa.sca.annotations.Scope;
 
 /**
  * Creates a <code>ContextFactory</code> for an entry point configured with the {@link WebServiceBinding}
- * 
+ *
  * @version $Rev$ $Date$
  */
 @Scope("MODULE")
-public class WebServiceEntryPointBuilder extends EntryPointBuilderSupport {
-
-    protected boolean handlesBindingType(Binding binding) {
-        return binding instanceof WebServiceBinding;
-    }
+public class WebServiceEntryPointBuilder extends EntryPointBuilderSupport<WebServiceBinding> {
 
     protected EntryPointContextFactory createEntryPointContextFactory(EntryPoint entryPoint, MessageFactory msgFactory) {
         return new WSEntryPointContextFactory(entryPoint.getName(), messageFactory);

Modified: incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/builder/JSONRPCEntryPointBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/builder/JSONRPCEntryPointBuilder.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/builder/JSONRPCEntryPointBuilder.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/builder/JSONRPCEntryPointBuilder.java Mon May  1 23:49:04 2006
@@ -16,17 +16,11 @@
 import org.apache.tuscany.core.builder.impl.EntryPointContextFactory;
 import org.apache.tuscany.core.extension.EntryPointBuilderSupport;
 import org.apache.tuscany.core.message.MessageFactory;
-import org.apache.tuscany.model.assembly.Binding;
 import org.apache.tuscany.model.assembly.EntryPoint;
 import org.osoa.sca.annotations.Scope;
 
 @Scope("MODULE")
-public class JSONRPCEntryPointBuilder extends  EntryPointBuilderSupport {
-
-    @Override
-    protected boolean handlesBindingType(Binding binding) {
-        return JSONRPCBinding.class.isAssignableFrom(binding.getClass());
-    }
+public class JSONRPCEntryPointBuilder extends EntryPointBuilderSupport<JSONRPCBinding> {
 
     @Override
     protected EntryPointContextFactory createEntryPointContextFactory(EntryPoint entryPoint, MessageFactory msgFactory) {

Modified: incubator/tuscany/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaTargetWireBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaTargetWireBuilder.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaTargetWireBuilder.java (original)
+++ incubator/tuscany/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaTargetWireBuilder.java Mon May  1 23:49:04 2006
@@ -29,11 +29,7 @@
  * @version $Rev$ $Date$
  */
 @Scope("MODULE")
-public class JavaTargetWireBuilder extends WireBuilderSupport {
-
-    protected boolean handlesTargetType(Class targetType) {
-        return JavaContextFactory.class.isAssignableFrom(targetType);
-    }
+public class JavaTargetWireBuilder extends WireBuilderSupport<JavaContextFactory> {
 
     protected TargetInvoker createInvoker(QualifiedName targetName, Method operation, ScopeContext context, boolean downScope) {
         boolean cacheable = !downScope;

Modified: incubator/tuscany/java/sca/containers/container.java/src/main/resources/system.fragment
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/containers/container.java/src/main/resources/system.fragment?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.java/src/main/resources/system.fragment (original)
+++ incubator/tuscany/java/sca/containers/container.java/src/main/resources/system.fragment Mon May  1 23:49:04 2006
@@ -21,6 +21,10 @@
     <component name="org.apache.tuscany.container.java.builder.JavaContextFactoryBuilder">
         <system:implementation.system class="org.apache.tuscany.container.java.builder.JavaContextFactoryBuilder"/>
     </component>
+    <component name="org.apache.tuscany.core.config.ComponentTypeIntrospector">
+        <system:implementation.system class="org.apache.tuscany.core.config.impl.Java5ComponentTypeIntrospector"/>
+    </component>
+
 
     <component name="org.apache.tuscany.container.java.builder.JavaTargetWireBuilder">
         <system:implementation.system class="org.apache.tuscany.container.java.builder.JavaTargetWireBuilder"/>

Modified: incubator/tuscany/java/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/integration/HelloWorldMCTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/integration/HelloWorldMCTestCase.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/integration/HelloWorldMCTestCase.java (original)
+++ incubator/tuscany/java/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/integration/HelloWorldMCTestCase.java Mon May  1 23:49:04 2006
@@ -33,7 +33,7 @@
 
     public void testHelloWorld() throws Exception {
         TuscanyRuntime tuscany = new TuscanyRuntime("test", null);
-        tuscany.start();
+        tuscany.start();                     
         ModuleContext moduleContext = CurrentModuleContext.getContext();
         assertNotNull(moduleContext);
 

Modified: incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptTargetWireBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptTargetWireBuilder.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptTargetWireBuilder.java (original)
+++ incubator/tuscany/java/sca/containers/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptTargetWireBuilder.java Mon May  1 23:49:04 2006
@@ -32,11 +32,7 @@
  * @version $Rev$ $Date$
  */
 @Scope("MODULE")
-public class JavaScriptTargetWireBuilder extends WireBuilderSupport {
-
-    protected boolean handlesTargetType(Class targetType) {
-        return JavaScriptContextFactory.class.isAssignableFrom(targetType);
-    }
+public class JavaScriptTargetWireBuilder extends WireBuilderSupport<JavaScriptContextFactory> {
 
     protected TargetInvoker createInvoker(QualifiedName targetName, Method operation, ScopeContext context, boolean downScope) {
         String serviceName = targetName.getPartName();

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/AbstractModuleComponentConfigurationLoader.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/AbstractModuleComponentConfigurationLoader.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/AbstractModuleComponentConfigurationLoader.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/AbstractModuleComponentConfigurationLoader.java Mon May  1 23:49:04 2006
@@ -23,7 +23,6 @@
 import org.apache.tuscany.core.config.processor.ProcessorUtils;
 import org.apache.tuscany.core.system.context.SystemCompositeContextImpl;
 import org.apache.tuscany.core.context.impl.CompositeContextImpl;
-import org.apache.tuscany.core.extension.config.ImplementationProcessor;
 import org.apache.tuscany.model.assembly.AssemblyFactory;
 import org.apache.tuscany.model.assembly.AssemblyContext;
 import org.apache.tuscany.model.assembly.Module;

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java Mon May  1 23:49:04 2006
@@ -25,20 +25,22 @@
 
 import org.apache.tuscany.core.config.ComponentTypeIntrospector;
 import org.apache.tuscany.core.config.ConfigurationLoadException;
-import org.apache.tuscany.core.extension.config.ImplementationProcessor;
 import org.apache.tuscany.core.config.JavaIntrospectionHelper;
 import org.apache.tuscany.core.config.processor.ProcessorUtils;
+import org.apache.tuscany.core.extension.config.ImplementationProcessor;
 import org.apache.tuscany.core.system.annotation.Autowire;
 import org.apache.tuscany.core.system.assembly.SystemAssemblyFactory;
 import org.apache.tuscany.model.assembly.AssemblyFactory;
 import org.apache.tuscany.model.assembly.ComponentInfo;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.ComponentName;
 
 /**
  * Introspects Java annotation-based metata data
  *
  * @version $Rev$ $Date$
  */
-@org.osoa.sca.annotations.Service(interfaces = {ComponentTypeIntrospector.class})
+@org.osoa.sca.annotations.Service(ComponentTypeIntrospector.class)
 public class Java5ComponentTypeIntrospector implements ComponentTypeIntrospector {
 
     private AssemblyFactory factory;
@@ -54,6 +56,7 @@
 
     @Autowire
     public void setFactory(SystemAssemblyFactory factory) {
+        System.out.println("setting "+factory);
         this.factory = factory;
         //FIXME JFM HACK
         List<ImplementationProcessor> processors = ProcessorUtils.createCoreProcessors(factory);
@@ -63,6 +66,14 @@
         // END hack
     }
 
+    @ComponentName
+    protected String name;
+
+    @Init(eager = true)
+    public void init(){
+        System.out.println("Eager init"+name);
+    }
+
     public void registerProcessor(ImplementationProcessor processor) {
         processors.add(processor);
     }
@@ -72,8 +83,8 @@
     }
 
     /**
-     * Visits the given implementation type and calls back to {@link org.apache.tuscany.core.extension.config.ImplementationProcessor}s registered with
-     * this introspector to build up a {@link ComponentInfo}
+     * Visits the given implementation type and calls back to {@link org.apache.tuscany.core.extension.config.ImplementationProcessor}s
+     * registered with this introspector to build up a {@link ComponentInfo}
      *
      * @return ComponentInfo representing the implementation type metadata
      * @throws ConfigurationLoadException if there is an error introspecting the implementation type

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/processor/ServiceProcessor.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/processor/ServiceProcessor.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/processor/ServiceProcessor.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/processor/ServiceProcessor.java Mon May  1 23:49:04 2006
@@ -52,15 +52,15 @@
         // visiting the base implementation class
         List<org.apache.tuscany.model.assembly.Service> services = type.getServices();
         Class[] interfaces = clazz.getInterfaces();
+        org.osoa.sca.annotations.Service serviceAnnotation = clazz.getAnnotation(org.osoa.sca.annotations.Service.class);
         if (interfaces.length == 0) {
             // no interfaces so the class is the service
             addService(services, clazz);
-        } else if (interfaces.length == 1) {
+        } else if (serviceAnnotation == null && interfaces.length == 1) {
             // the impl has one interface, assign it to be the service
             addService(services, interfaces[0]);
         } else {
             // visiting the implementation class
-            org.osoa.sca.annotations.Service serviceAnnotation = clazz.getAnnotation(org.osoa.sca.annotations.Service.class);
             if (serviceAnnotation == null) {
                 return;
             }

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/ExternalServiceContext.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/ExternalServiceContext.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/ExternalServiceContext.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/ExternalServiceContext.java Mon May  1 23:49:04 2006
@@ -21,7 +21,7 @@
 public interface ExternalServiceContext extends Context {
 
     /**
-     * Returns the handler responsible for flowing a request through the entry point
+     * Returns the handler responsible for flowing a request through the external service
      * @throws TargetException
      */
      public Object getHandler() throws TargetException;

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/EntryPointBuilderSupport.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/EntryPointBuilderSupport.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/EntryPointBuilderSupport.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/EntryPointBuilderSupport.java Mon May  1 23:49:04 2006
@@ -13,6 +13,9 @@
  */
 package org.apache.tuscany.core.extension;
 
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
 import org.apache.tuscany.core.builder.BuilderException;
 import org.apache.tuscany.core.builder.ContextFactoryBuilder;
 import org.apache.tuscany.core.builder.ContextFactoryBuilderRegistry;
@@ -33,13 +36,21 @@
  *
  * @version $$Rev$$ $$Date$$
  */
-public abstract class EntryPointBuilderSupport implements ContextFactoryBuilder {
+public abstract class EntryPointBuilderSupport<T extends Binding> implements ContextFactoryBuilder {
 
     protected ContextFactoryBuilderRegistry builderRegistry;
     protected WireFactoryService wireService;
     protected MessageFactory messageFactory;
+    protected Class bindingClass;
 
     public EntryPointBuilderSupport() {
+        // reflect the generic type of the subclass
+        Type type = this.getClass().getGenericSuperclass();
+        if (type instanceof ParameterizedType) {
+            bindingClass = (Class) ((ParameterizedType) type).getActualTypeArguments()[0];
+        } else {
+            throw new AssertionError("Subclasses of " + ContextFactoryBuilderSupport.class.getName() + " must be genericized");
+        }
     }
 
     @Init(eager = true)
@@ -72,8 +83,10 @@
             return;
         }
         EntryPoint entryPoint = (EntryPoint) object;
-        if (entryPoint.getBindings().size() < 1
-                || !(handlesBindingType(entryPoint.getBindings().get(0)))) {
+        if (entryPoint.getBindings().size() < 1) {
+            return;
+        }
+        if (!bindingClass.isAssignableFrom(entryPoint.getBindings().get(0).getClass())) {
             return;
         }
 
@@ -86,14 +99,12 @@
     }
 
     /**
-     * Returns true if an extending implementation can process the given binding element
-     */
-    protected abstract boolean handlesBindingType(Binding binding);
-
-    /**
-     * Callback to create the specific <code>ContextFactory</code> type associated with the extending implementation
+     * Callback to create the specific <code>ContextFactory</code> type associated with the extending
+     * implementation
+     *
      * @param entryPoint the entry point being processed
-     * @param msgFactory the message factory to be used by <code>EntryPointContext</code> when flowing invocations
+     * @param msgFactory the message factory to be used by <code>EntryPointContext</code> when flowing
+     *                   invocations
      */
     protected abstract EntryPointContextFactory createEntryPointContextFactory(EntryPoint entryPoint, MessageFactory msgFactory);
 

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/ExternalServiceBuilderSupport.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/ExternalServiceBuilderSupport.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/ExternalServiceBuilderSupport.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/ExternalServiceBuilderSupport.java Mon May  1 23:49:04 2006
@@ -1,5 +1,8 @@
 package org.apache.tuscany.core.extension;
 
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
 import org.apache.tuscany.core.builder.BuilderException;
 import org.apache.tuscany.core.builder.ContextFactoryBuilder;
 import org.apache.tuscany.core.builder.ContextFactoryBuilderRegistry;
@@ -19,15 +22,24 @@
  *
  * @version $$Rev$$ $$Date$$
  */
-public abstract class ExternalServiceBuilderSupport implements ContextFactoryBuilder {
+public abstract class ExternalServiceBuilderSupport<T extends Binding> implements ContextFactoryBuilder {
 
     private ContextFactoryBuilderRegistry builderRegistry;
     private WireFactoryService wireService;
+    protected Class bindingClass;
 
     public ExternalServiceBuilderSupport() {
+        // reflect the generic type of the subclass
+        Type type = this.getClass().getGenericSuperclass();
+        if (type instanceof ParameterizedType) {
+            bindingClass = (Class) ((ParameterizedType) type).getActualTypeArguments()[0];
+        } else {
+            throw new AssertionError("Subclasses of " + ContextFactoryBuilderSupport.class.getName() + " must be genericized");
+        }
     }
 
     public ExternalServiceBuilderSupport(WireFactoryService wireService) {
+        this();
         this.wireService = wireService;
     }
 
@@ -51,8 +63,11 @@
             return;
         }
         ExternalService externalService = (ExternalService) object;
-        if (externalService.getBindings().size() < 1
-                || !(handlesBindingType(externalService.getBindings().get(0)))) {
+        if (externalService.getBindings().size() < 1) {
+            //   || !(handlesBindingType(externalService.getBindings().get(0)))) {
+            return;
+        }
+        if (!bindingClass.isAssignableFrom(externalService.getBindings().get(0).getClass())) {
             return;
         }
 
@@ -69,12 +84,14 @@
     /**
      * Returns true if an extending implementation can process the given binding element
      */
-    protected abstract boolean handlesBindingType(Binding binding);
+    //protected abstract boolean handlesBindingType(Binding binding);
 
     /**
-    * Callback to create the specific <code>ContextFactory</code> type associated with the extending implementation
-    * @param externalService the external service being processed
-    */
+     * Callback to create the specific <code>ContextFactory</code> type associated with the extending
+     * implementation
+     *
+     * @param externalService the external service being processed
+     */
     protected abstract ExternalServiceContextFactory createExternalServiceContextFactory(ExternalService externalService);
 
 }

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/WireBuilderSupport.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/WireBuilderSupport.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/WireBuilderSupport.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/extension/WireBuilderSupport.java Mon May  1 23:49:04 2006
@@ -13,6 +13,10 @@
  */
 package org.apache.tuscany.core.extension;
 
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
 import org.apache.tuscany.core.builder.BuilderConfigException;
 import org.apache.tuscany.core.builder.WireBuilder;
 import org.apache.tuscany.core.context.QualifiedName;
@@ -21,21 +25,20 @@
 import org.apache.tuscany.core.system.annotation.Autowire;
 import org.apache.tuscany.core.wire.SourceInvocationConfiguration;
 import org.apache.tuscany.core.wire.SourceWireFactory;
+import org.apache.tuscany.core.wire.TargetInvocationConfiguration;
 import org.apache.tuscany.core.wire.TargetInvoker;
 import org.apache.tuscany.core.wire.TargetWireFactory;
-import org.apache.tuscany.core.wire.TargetInvocationConfiguration;
 import org.osoa.sca.annotations.Init;
 
-import java.lang.reflect.Method;
-
 /**
  * A base class for {@link WireBuilder} implementations
  *
  * @version $$Rev$$ $$Date$$
  */
-public abstract class WireBuilderSupport implements WireBuilder {
+public abstract class WireBuilderSupport<T> implements WireBuilder {
 
     protected RuntimeContext runtimeContext;
+    protected Class targetClass;
 
     @Autowire
     public void setRuntimeContext(RuntimeContext context) {
@@ -43,6 +46,13 @@
     }
 
     public WireBuilderSupport() {
+        // reflect the generic type of the subclass
+        Type type = this.getClass().getGenericSuperclass();
+        if (type instanceof ParameterizedType) {
+            targetClass = (Class) ((ParameterizedType) type).getActualTypeArguments()[0];
+        } else {
+            throw new AssertionError("Subclasses of " + ContextFactoryBuilderSupport.class.getName() + " must be genericized");
+        }
     }
 
     @Init(eager = true)
@@ -52,9 +62,10 @@
 
     public void connect(SourceWireFactory sourceFactory, TargetWireFactory targetFactory, Class targetType, boolean downScope,
                         ScopeContext targetScopeContext) throws BuilderConfigException {
-        if (!handlesTargetType(targetType)) {
+        if (!targetClass.isAssignableFrom(targetType)) {
             return;
         }
+
         for (SourceInvocationConfiguration sourceInvocationConfig : sourceFactory.getConfiguration().getInvocationConfigurations()
                 .values()) {
             TargetInvoker invoker = createInvoker(sourceFactory.getConfiguration()
@@ -65,30 +76,25 @@
 
     public void completeTargetChain(TargetWireFactory targetFactory, Class targetType, ScopeContext targetScopeContext)
             throws BuilderConfigException {
-        
-        if (!handlesTargetType(targetType)) {
+
+        if (!targetClass.isAssignableFrom(targetType)) {
             return;
         }
         for (TargetInvocationConfiguration targetInvocationConfig : targetFactory.getConfiguration().getInvocationConfigurations()
                 .values()) {
             Method method = targetInvocationConfig.getMethod();
-            TargetInvoker invoker = createInvoker(targetFactory.getConfiguration().getTargetName(), method, targetScopeContext,false);
+            TargetInvoker invoker = createInvoker(targetFactory.getConfiguration().getTargetName(), method, targetScopeContext, false);
             targetInvocationConfig.setTargetInvoker(invoker);
         }
     }
 
     /**
-     * Returns true if an extending implementation can process the given target type
-     */
-    protected abstract boolean handlesTargetType(Class targetType);
-
-    /**
      * Callback to create the specific <code>TargetInvoker</code> type for dispatching to the target type
      *
      * @param targetName the fully qualified name of the wire target
-     * @param operation the operation the invoker will be associated with
-     * @param context the scope context that manages the target context
-     * @param downScope whether the wire source scope is "longer" than the target
+     * @param operation  the operation the invoker will be associated with
+     * @param context    the scope context that manages the target context
+     * @param downScope  whether the wire source scope is "longer" than the target
      */
     protected abstract TargetInvoker createInvoker(QualifiedName targetName, Method operation, ScopeContext context, boolean downScope);
 

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java Mon May  1 23:49:04 2006
@@ -19,7 +19,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
@@ -27,8 +26,8 @@
 import org.apache.tuscany.core.config.ComponentTypeIntrospector;
 import org.apache.tuscany.core.config.ConfigurationException;
 import org.apache.tuscany.core.config.ConfigurationLoadException;
-import org.apache.tuscany.core.config.processor.ProcessorUtils;
 import org.apache.tuscany.core.config.impl.Java5ComponentTypeIntrospector;
+import org.apache.tuscany.core.config.processor.ProcessorUtils;
 import org.apache.tuscany.core.loader.assembly.ComponentLoader;
 import org.apache.tuscany.core.loader.assembly.EntryPointLoader;
 import org.apache.tuscany.core.loader.assembly.InterfaceJavaLoader;

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/injection/AutowireObjectFactory.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/injection/AutowireObjectFactory.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/injection/AutowireObjectFactory.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/injection/AutowireObjectFactory.java Mon May  1 23:49:04 2006
@@ -62,13 +62,6 @@
             throw e;
         }
         AutowireContext ctx = (AutowireContext) parent;
-//        if (ctx == null && required) {
-//            AutowireResolutionException e = new AutowireResolutionException("Required autowire not found");
-//            e.setIdentifier(autowireType.getName());
-//            throw e;
-//        } else if (ctx == null) {
-//            return null;
-//        }
         return ctx.resolveInstance(autowireType);
     }
 

Modified: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/CoreAnnotationsProcessingTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/CoreAnnotationsProcessingTestCase.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/CoreAnnotationsProcessingTestCase.java (original)
+++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/CoreAnnotationsProcessingTestCase.java Mon May  1 23:49:04 2006
@@ -66,6 +66,18 @@
     }
 
     /**
+     * Tests the case where an implementation specifies a service interface of its parent as opposed to the
+     * single interface it directly implements
+     */
+    public void testInteraceHierarchyServiceProcessing() throws Exception {
+        ComponentInfo type = factory.createComponentInfo();
+        introspector.introspect(SuperFooImpl.class, type);
+        assertEquals(1, type.getServices().size());
+        ServiceContract contract = type.getServices().get(0).getServiceContract();
+        assertEquals(SuperSuperFoo.class, contract.getInterface());
+    }
+
+    /**
      * Tests the case where a class implements two interfaces, with one specified using <code>@Service</code>
      * and one marked with <code>@Remotable</code>
      */
@@ -119,24 +131,15 @@
     }
 
     /**
-    FIXME JFM - temporarily disabled until non-annotated properties are fixed
-    public void testPropertyProcessing() throws Exception {
-        ComponentInfo type = factory.createComponentInfo();
-        introspector.introspect(TestComponentImpl.class, type);
-        List<Property>properties = type.getProperties();
-        assertEquals(3, properties.size());
-        for (Property property : properties) {
-            if (!property.getName().equals("foo") && !property.getName().equals("fooRequired")
-                    && !property.getName().equals("baz")) {
-                fail("Property names not handled properly");
-            }
-            if (property.getName().equals("fooRequired")) {
-                assertTrue(property.isRequired());
-            } else {
-                assertFalse(property.isRequired());
-            }
-        }
-    } **/
+     * FIXME JFM - temporarily disabled until non-annotated properties are fixed public void
+     * testPropertyProcessing() throws Exception { ComponentInfo type = factory.createComponentInfo();
+     * introspector.introspect(TestComponentImpl.class, type); List<Property>properties =
+     * type.getProperties(); assertEquals(3, properties.size()); for (Property property : properties) { if
+     * (!property.getName().equals("foo") && !property.getName().equals("fooRequired") &&
+     * !property.getName().equals("baz")) { fail("Property names not handled properly"); } if
+     * (property.getName().equals("fooRequired")) { assertTrue(property.isRequired()); } else {
+     * assertFalse(property.isRequired()); } } } *
+     */
 
     public void testReferenceProcessing() throws Exception {
         ComponentInfo type = factory.createComponentInfo();
@@ -164,7 +167,7 @@
     protected void setUp() throws Exception {
         super.setUp();
         factory = new SystemAssemblyFactoryImpl();
-        introspector = ProcessorUtils.createCoreIntrospector(factory); 
+        introspector = ProcessorUtils.createCoreIntrospector(factory);
     }
 
 }

Added: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperFoo.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperFoo.java?rev=398828&view=auto
==============================================================================
--- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperFoo.java (added)
+++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperFoo.java Mon May  1 23:49:04 2006
@@ -0,0 +1,7 @@
+package org.apache.tuscany.core.config.impl;
+
+/**
+ * @version $$Rev$$ $$Date$$
+ */
+public interface SuperFoo {
+}

Added: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperFooImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperFooImpl.java?rev=398828&view=auto
==============================================================================
--- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperFooImpl.java (added)
+++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperFooImpl.java Mon May  1 23:49:04 2006
@@ -0,0 +1,10 @@
+package org.apache.tuscany.core.config.impl;
+
+import org.osoa.sca.annotations.Service;
+
+/**
+ * @version $$Rev$$ $$Date$$
+ */
+@Service(SuperSuperFoo.class)
+public class SuperFooImpl extends SuperSuperFooImpl implements SuperFoo{
+}

Added: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperSuperFoo.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperSuperFoo.java?rev=398828&view=auto
==============================================================================
--- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperSuperFoo.java (added)
+++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperSuperFoo.java Mon May  1 23:49:04 2006
@@ -0,0 +1,7 @@
+package org.apache.tuscany.core.config.impl;
+
+/**
+ * @version $$Rev$$ $$Date$$
+ */
+public interface SuperSuperFoo {
+}

Added: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperSuperFooImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperSuperFooImpl.java?rev=398828&view=auto
==============================================================================
--- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperSuperFooImpl.java (added)
+++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/config/impl/SuperSuperFooImpl.java Mon May  1 23:49:04 2006
@@ -0,0 +1,20 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.tuscany.core.config.impl;
+
+/**
+ * @version $$Rev$$ $$Date$$
+ */
+public class SuperSuperFooImpl implements SuperSuperFoo {
+}

Copied: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/ContextFactorySupportTestCase.java (from r398774, incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/GenericReflectionTestCase.java)
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/ContextFactorySupportTestCase.java?p2=incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/ContextFactorySupportTestCase.java&p1=incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/GenericReflectionTestCase.java&r1=398774&r2=398828&rev=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/GenericReflectionTestCase.java (original)
+++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/ContextFactorySupportTestCase.java Mon May  1 23:49:04 2006
@@ -9,7 +9,7 @@
 /**
  * @version $$Rev$$ $$Date$$
  */
-public class GenericReflectionTestCase extends TestCase {
+public class ContextFactorySupportTestCase extends TestCase {
 
     public void testGenericReflection() throws Exception {
         TestFactoryBuilder b = new TestFactoryBuilder();

Added: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/EntryPointBuilderSupportTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/EntryPointBuilderSupportTestCase.java?rev=398828&view=auto
==============================================================================
--- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/EntryPointBuilderSupportTestCase.java (added)
+++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/EntryPointBuilderSupportTestCase.java Mon May  1 23:49:04 2006
@@ -0,0 +1,62 @@
+package org.apache.tuscany.core.extension;
+
+import junit.framework.TestCase;
+import org.apache.tuscany.core.builder.impl.EntryPointContextFactory;
+import org.apache.tuscany.core.message.MessageFactory;
+import org.apache.tuscany.model.assembly.Binding;
+import org.apache.tuscany.model.assembly.EntryPoint;
+
+/**
+ * @version $$Rev$$ $$Date$$
+ */
+public class EntryPointBuilderSupportTestCase extends TestCase {
+
+    public void testGenericReflection() throws Exception {
+        EntryPointBuilderSupportTestCase.TestEntryPointBuilder b = new EntryPointBuilderSupportTestCase.TestEntryPointBuilder();
+        assertEquals(EntryPointBuilderSupportTestCase.TestBinding.class, b.getImplementationClass());
+    }
+
+    public void testNegativeGenericReflection() throws Exception {
+        try {
+            new EntryPointBuilderSupportTestCase.NonGenericFactoryBuilder();
+            fail("AssertionError expected on non-genericized subclass of " + ContextFactoryBuilderSupport.class.getName());
+        } catch (AssertionError e) {
+            // indicates success
+        }
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+
+    private class TestEntryPointBuilder extends EntryPointBuilderSupport<EntryPointBuilderSupportTestCase.TestBinding> {
+
+        public Class getImplementationClass() {
+            return bindingClass;
+        }
+
+        protected EntryPointContextFactory createEntryPointContextFactory(EntryPoint entryPoint, MessageFactory msgFactory) {
+            return null;
+        }
+    }
+
+    private class NonGenericFactoryBuilder extends EntryPointBuilderSupport {
+
+        public Class getImplementationClass() {
+            return bindingClass;
+        }
+
+        protected EntryPointContextFactory createEntryPointContextFactory(EntryPoint entryPoint, MessageFactory msgFactory) {
+            return null;
+        }
+    }
+
+    private interface TestBinding extends Binding {
+
+    }
+}

Added: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/ExternalServiceBuilderSupportTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/ExternalServiceBuilderSupportTestCase.java?rev=398828&view=auto
==============================================================================
--- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/ExternalServiceBuilderSupportTestCase.java (added)
+++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/ExternalServiceBuilderSupportTestCase.java Mon May  1 23:49:04 2006
@@ -0,0 +1,64 @@
+package org.apache.tuscany.core.extension;
+
+import junit.framework.TestCase;
+import org.apache.tuscany.core.builder.impl.ExternalServiceContextFactory;
+import org.apache.tuscany.model.assembly.Binding;
+import org.apache.tuscany.model.assembly.ExternalService;
+
+/**
+ * @version $$Rev$$ $$Date$$
+ */
+public class ExternalServiceBuilderSupportTestCase extends TestCase {
+
+    public void testGenericReflection() throws Exception {
+        ExternalServiceBuilderSupportTestCase.TestExternalServiceBuilder b = new ExternalServiceBuilderSupportTestCase.TestExternalServiceBuilder();
+        assertEquals(ExternalServiceBuilderSupportTestCase.TestBinding.class, b.getImplementationClass());
+    }
+
+    public void testNegativeGenericReflection() throws Exception {
+        try {
+            new ExternalServiceBuilderSupportTestCase.NonGenericFactoryBuilder();
+            fail("AssertionError expected on non-genericized subclass of " + ContextFactoryBuilderSupport.class.getName());
+        } catch (AssertionError e) {
+            // indicates success
+        }
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+
+    private class TestExternalServiceBuilder extends ExternalServiceBuilderSupport<ExternalServiceBuilderSupportTestCase.TestBinding> {
+
+
+        public Class getImplementationClass() {
+            return bindingClass;
+        }
+
+        protected ExternalServiceContextFactory createExternalServiceContextFactory(ExternalService externalService) {
+            return null;
+        }
+    }
+
+    private class NonGenericFactoryBuilder extends ExternalServiceBuilderSupport {
+
+
+        public Class getImplementationClass() {
+            return bindingClass;
+        }
+
+
+        protected ExternalServiceContextFactory createExternalServiceContextFactory(ExternalService externalService) {
+            return null;
+        }
+    }
+
+    private interface TestBinding extends Binding {
+
+    }
+}

Modified: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/WireBuilderSupportTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/WireBuilderSupportTestCase.java?rev=398828&r1=398827&r2=398828&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/WireBuilderSupportTestCase.java (original)
+++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/extension/WireBuilderSupportTestCase.java Mon May  1 23:49:04 2006
@@ -1,5 +1,10 @@
 package org.apache.tuscany.core.extension;
 
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
 import junit.framework.TestCase;
 import org.apache.tuscany.core.builder.impl.DefaultWireBuilder;
 import org.apache.tuscany.core.context.QualifiedName;
@@ -14,11 +19,6 @@
 import org.apache.tuscany.core.wire.mock.MockScopeContext;
 import org.apache.tuscany.model.assembly.Implementation;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map;
-
 /**
  * @version $$Rev$$ $$Date$$
  */
@@ -26,8 +26,8 @@
     private Method m;
 
     /**
-     * Tests that {@link WireBuilderSupport} only processes connect operations and sets target invokers for the correct target
-     * type.
+     * Tests that {@link WireBuilderSupport} only processes connect operations and sets target invokers for
+     * the correct target type.
      * <p/>
      * Verifies TUSCANY-218
      *
@@ -79,22 +79,14 @@
 
     }
 
-    private class FooWireBuilder extends WireBuilderSupport {
-
-        protected boolean handlesTargetType(Class targetType) {
-            return Foo.class.isAssignableFrom(targetType);
-        }
+    private class FooWireBuilder extends WireBuilderSupport<Foo> {
 
         protected TargetInvoker createInvoker(QualifiedName targetName, Method operation, ScopeContext context, boolean downScope) {
             return new FooInvoker();
         }
     }
 
-    private class BarWireBuilder extends WireBuilderSupport {
-
-        protected boolean handlesTargetType(Class targetType) {
-            return Bar.class.isAssignableFrom(targetType);
-        }
+    private class BarWireBuilder extends WireBuilderSupport<Bar> {
 
         protected TargetInvoker createInvoker(QualifiedName targetName, Method operation, ScopeContext context, boolean downScope) {
             return new BarInvoker();