You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2007/04/11 03:34:52 UTC

svn commit: r527362 - in /incubator/tuscany/java/sca/modules: assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ core-spring/src/main/java/org/apache/tuscany/java/bean/impl/ implementation-java-runtime/src/test/java/org/apache/tuscany/cor...

Author: jsdelfino
Date: Tue Apr 10 18:34:51 2007
New Revision: 527362

URL: http://svn.apache.org/viewvc?view=rev&rev=527362
Log:
Hooked the introspection of interfaces with the artifact processors. Simplified a little the Java interface introspector interface.

Modified:
    incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseArtifactProcessor.java
    incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/java/bean/impl/BeanJavaInterfaceImpl.java
    incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInvocationHandlerProxyTestCase.java
    incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/HeuristicPojoProcessor.java
    incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ReferenceProcessor.java
    incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ServiceProcessor.java
    incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceIntrospector.java
    incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceProcessor.java
    incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImpl.java
    incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/xml/JavaInterfaceProcessor.java
    incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/ConversationalIntrospectionTestCase.java
    incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImplTestCase.java
    incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/JavaInterface.java
    incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/impl/JavaInterfaceImpl.java
    incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java

Modified: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseArtifactProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseArtifactProcessor.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseArtifactProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseArtifactProcessor.java Tue Apr 10 18:34:51 2007
@@ -52,7 +52,6 @@
 import org.apache.tuscany.assembly.Property;
 import org.apache.tuscany.assembly.Reference;
 import org.apache.tuscany.assembly.xml.Constants;
-import org.apache.tuscany.interfacedef.Interface;
 import org.apache.tuscany.interfacedef.InterfaceContract;
 import org.apache.tuscany.interfacedef.Operation;
 import org.apache.tuscany.policy.Intent;
@@ -379,25 +378,6 @@
     }
     
     /**
-     * Resolve an interface.
-     * @param interfaze
-     * @param resolver
-     * @return
-     * @throws ContributionResolveException
-     */
-    protected Interface resolveInterface(Interface interfaze, ArtifactResolver resolver) throws ContributionResolveException {
-        if (interfaze != null) {
-            interfaze = resolver.resolve(Interface.class, interfaze);
-            if (interfaze.isUnresolved()) {
-                extensionProcessor.resolve(interfaze, resolver);
-                interfaze.setUnresolved(false);
-                resolver.add(interfaze);
-            }
-        }
-        return interfaze;
-    }
-
-    /**
      * Resolve an implementation.
      * @param implementation
      * @param resolver
@@ -423,25 +403,17 @@
      */
     protected <C extends Contract> void resolveContracts(List<C> contracts, ArtifactResolver resolver) throws ContributionResolveException {
         for (Contract contract: contracts) {
+
+            // Resolve the interface contract
             InterfaceContract interfaceContract = contract.getInterfaceContract();
-            if (interfaceContract == null)
-                continue;
-            
-            // Resolve interface
-            Interface callInterface = interfaceContract.getInterface();
-            callInterface = resolveInterface(callInterface, resolver);
-            interfaceContract.setInterface(callInterface);
-    
-            // Resolve callback interface 
-            Interface callbackInterface = interfaceContract.getCallbackInterface();
-            callbackInterface = resolveInterface(callbackInterface, resolver);
-            interfaceContract.setCallbackInterface(callbackInterface);
-    
+            if (interfaceContract != null) {
+                extensionProcessor.resolve(interfaceContract, resolver);
+            }
+
             // Resolve bindings
             for (int i = 0, n = contract.getBindings().size(); i < n; i++) {
                 Binding binding = contract.getBindings().get(i);
-                binding = resolver.resolve(Binding.class, binding);
-                contract.getBindings().set(i, binding);
+                extensionProcessor.resolve(binding, resolver);
             }
         }
     }
@@ -451,21 +423,14 @@
      * @param contracts the list of contracts
      * @param resolver the resolver to use to resolve models
      */
-    protected <C extends AbstractContract> void resolveAbstractContracts(List<C> contracts, ArtifactResolver resolver) {
+    protected <C extends AbstractContract> void resolveAbstractContracts(List<C> contracts, ArtifactResolver resolver) throws ContributionResolveException {
         for (AbstractContract contract: contracts) {
+
+            // Resolve the interface contract
             InterfaceContract interfaceContract = contract.getInterfaceContract();
-            if (interfaceContract == null)
-                continue;
-            
-            // Resolve interface
-            Interface callInterface = interfaceContract.getInterface();
-            callInterface = resolver.resolve(Interface.class, callInterface);
-            interfaceContract.setInterface(callInterface);
-    
-            // Resolve callback interface 
-            Interface callbackInterface = interfaceContract.getCallbackInterface();
-            callbackInterface = resolver.resolve(Interface.class, callbackInterface);
-            interfaceContract.setCallbackInterface(callbackInterface);
+            if (interfaceContract != null) {
+                extensionProcessor.resolve(interfaceContract, resolver);
+            }
         }
     }
 

Modified: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/java/bean/impl/BeanJavaInterfaceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/java/bean/impl/BeanJavaInterfaceImpl.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/java/bean/impl/BeanJavaInterfaceImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/java/bean/impl/BeanJavaInterfaceImpl.java Tue Apr 10 18:34:51 2007
@@ -35,6 +35,7 @@
 
 	private String className;
 	private Class<?> javaClass;
+        private Class<?> callbackClass;
 	private boolean conversational;
 	private boolean remotable;
 	List<Intent> requiredIntents = new ArrayList<Intent>();
@@ -62,6 +63,14 @@
 	public void setJavaClass(Class<?> javaClass) {
 		this.javaClass = javaClass;
 	}
+        
+        public Class<?> getCallbackClass() {
+            return callbackClass;
+        }
+        
+        public void setCallbackClass(Class<?> callbackClass) {
+            this.callbackClass = callbackClass;
+        }
 
 	public boolean isConversational() {
 		return conversational;

Modified: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInvocationHandlerProxyTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInvocationHandlerProxyTestCase.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInvocationHandlerProxyTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInvocationHandlerProxyTestCase.java Tue Apr 10 18:34:51 2007
@@ -28,6 +28,8 @@
 import org.apache.tuscany.core.wire.InvocationChainImpl;
 import org.apache.tuscany.core.wire.WireImpl;
 import org.apache.tuscany.interfacedef.Operation;
+import org.apache.tuscany.interfacedef.java.JavaInterfaceContract;
+import org.apache.tuscany.interfacedef.java.impl.JavaInterfaceContractImpl;
 import org.apache.tuscany.interfacedef.java.introspection.JavaInterfaceProcessorRegistry;
 import org.apache.tuscany.interfacedef.java.introspection.impl.JavaInterfaceProcessorRegistryImpl;
 import org.apache.tuscany.spi.wire.InvocationChain;
@@ -51,7 +53,9 @@
         Wire wire = new WireImpl();
 
         Contract contract = new DefaultAssemblyFactory().createComponentReference();
-        registry.introspect(contract, Target.class);
+        JavaInterfaceContract interfaceContract = new JavaInterfaceContractImpl();
+        contract.setInterfaceContract(interfaceContract);
+        interfaceContract.setInterface(registry.introspect(Target.class));
         for (Operation operation : contract.getInterfaceContract().getInterface().getOperations()) {
             InvocationChain chain = new InvocationChainImpl(operation);
             wire.addInvocationChain(operation, chain);

Modified: incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/HeuristicPojoProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/HeuristicPojoProcessor.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/HeuristicPojoProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/HeuristicPojoProcessor.java Tue Apr 10 18:34:51 2007
@@ -52,7 +52,9 @@
 import org.apache.tuscany.interfacedef.InvalidInterfaceException;
 import org.apache.tuscany.interfacedef.java.JavaFactory;
 import org.apache.tuscany.interfacedef.java.JavaInterface;
+import org.apache.tuscany.interfacedef.java.JavaInterfaceContract;
 import org.apache.tuscany.interfacedef.java.impl.DefaultJavaFactory;
+import org.apache.tuscany.interfacedef.java.impl.JavaInterfaceContractImpl;
 import org.apache.tuscany.interfacedef.util.JavaXMLMapper;
 import org.osoa.sca.annotations.Callback;
 import org.osoa.sca.annotations.Property;
@@ -572,8 +574,15 @@
         throws ProcessingException {
         org.apache.tuscany.assembly.Reference reference = factory.createReference();
         reference.setName(name);
+        JavaInterfaceContract interfaceContract = new JavaInterfaceContractImpl();
+        reference.setInterfaceContract(interfaceContract);
         try {
-            interfaceProcessorRegistry.introspect(reference, paramType);
+            JavaInterface callInterface = interfaceProcessorRegistry.introspect(paramType);
+            reference.getInterfaceContract().setInterface(callInterface);
+            if (callInterface.getCallbackClass() != null) {
+                JavaInterface callbackInterface = interfaceProcessorRegistry.introspect(callInterface.getCallbackClass());
+                reference.getInterfaceContract().setCallbackInterface(callbackInterface);
+            }
             reference.setMultiplicity(Multiplicity.ZERO_ONE);
         } catch (InvalidInterfaceException e1) {
             throw new ProcessingException(e1);
@@ -589,7 +598,17 @@
     public org.apache.tuscany.assembly.Service createService(Class<?> interfaze) throws InvalidInterfaceException {
         org.apache.tuscany.assembly.Service service = factory.createService();
         service.setName(interfaze.getSimpleName());
-        interfaceProcessorRegistry.introspect(service, interfaze);
+
+        JavaInterfaceContract interfaceContract = new JavaInterfaceContractImpl();
+        service.setInterfaceContract(interfaceContract);
+        
+        JavaInterface callInterface = interfaceProcessorRegistry.introspect(interfaze);
+        service.getInterfaceContract().setInterface(callInterface);
+        if (callInterface.getCallbackClass() != null) {
+            JavaInterface callbackInterface = interfaceProcessorRegistry.introspect(callInterface.getCallbackClass());
+            service.getInterfaceContract().setCallbackInterface(callbackInterface);
+        }
+        
         Interface javaInterface = service.getInterfaceContract().getInterface();
         javaInterface.setRemotable(interfaze.getAnnotation(Remotable.class) != null);
         service.getInterfaceContract().setInterface(javaInterface);

Modified: incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ReferenceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ReferenceProcessor.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ReferenceProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ReferenceProcessor.java Tue Apr 10 18:34:51 2007
@@ -33,6 +33,9 @@
 import org.apache.tuscany.implementation.java.introspection.ImplementationProcessorExtension;
 import org.apache.tuscany.implementation.java.introspection.ProcessingException;
 import org.apache.tuscany.interfacedef.InvalidInterfaceException;
+import org.apache.tuscany.interfacedef.java.JavaInterface;
+import org.apache.tuscany.interfacedef.java.JavaInterfaceContract;
+import org.apache.tuscany.interfacedef.java.impl.JavaInterfaceContractImpl;
 import org.osoa.sca.annotations.Reference;
 
 /**
@@ -118,6 +121,9 @@
 
     private org.apache.tuscany.assembly.Reference createReference(JavaElement element, String name) throws ProcessingException {
         org.apache.tuscany.assembly.Reference reference = new ReferenceImpl();
+        JavaInterfaceContract interfaceContract = new JavaInterfaceContractImpl();
+        reference.setInterfaceContract(interfaceContract);
+        
         // reference.setMember((Member)element.getAnchor());
         boolean required = false;
         Reference ref = element.getAnnotation(Reference.class);
@@ -143,7 +149,12 @@
         Type genericType = element.getGenericType();
         Class<?> baseType = getBaseType(rawType, genericType);
         try {
-            interfaceProcessorRegistry.introspect(reference, baseType);
+            JavaInterface callInterface = interfaceProcessorRegistry.introspect(baseType);
+            reference.getInterfaceContract().setInterface(callInterface);
+            if (callInterface.getCallbackClass() != null) {
+                JavaInterface callbackInterface = interfaceProcessorRegistry.introspect(callInterface.getCallbackClass());
+                reference.getInterfaceContract().setCallbackInterface(callbackInterface);
+            }
         } catch (InvalidInterfaceException e) {
             throw new ProcessingException(e);
         }

Modified: incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ServiceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ServiceProcessor.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ServiceProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/implementation/java/processor/ServiceProcessor.java Tue Apr 10 18:34:51 2007
@@ -32,6 +32,8 @@
 import org.apache.tuscany.implementation.java.introspection.ProcessingException;
 import org.apache.tuscany.interfacedef.InvalidInterfaceException;
 import org.apache.tuscany.interfacedef.java.JavaInterface;
+import org.apache.tuscany.interfacedef.java.JavaInterfaceContract;
+import org.apache.tuscany.interfacedef.java.impl.JavaInterfaceContractImpl;
 import org.osoa.sca.annotations.Callback;
 import org.osoa.sca.annotations.Remotable;
 
@@ -133,9 +135,18 @@
 
     public Service createService(Class<?> interfaze) throws InvalidInterfaceException {
         Service service = factory.createService();
+        JavaInterfaceContract interfaceContract = new JavaInterfaceContractImpl();
+        service.setInterfaceContract(interfaceContract);
+
         // create a relative URI
         service.setName(interfaze.getSimpleName());
-        interfaceProcessorRegistry.introspect(service, interfaze);
+
+        JavaInterface callInterface = interfaceProcessorRegistry.introspect(interfaze);
+        service.getInterfaceContract().setInterface(callInterface);
+        if (callInterface.getCallbackClass() != null) {
+            JavaInterface callbackInterface = interfaceProcessorRegistry.introspect(callInterface.getCallbackClass());
+            service.getInterfaceContract().setCallbackInterface(callbackInterface);
+        }
         return service;
     }
 

Modified: incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceIntrospector.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceIntrospector.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceIntrospector.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceIntrospector.java Tue Apr 10 18:34:51 2007
@@ -18,8 +18,8 @@
  */
 package org.apache.tuscany.interfacedef.java.introspection;
 
-import org.apache.tuscany.assembly.Contract;
 import org.apache.tuscany.interfacedef.InvalidInterfaceException;
+import org.apache.tuscany.interfacedef.java.JavaInterface;
 
 /**
  * Processor for creating JavaServiceContract definitions from Java Classes.
@@ -34,13 +34,6 @@
      * @param type the interface to inspect
      * @return a JavaServiceContract corresponding to the Java interface
      */
-    void introspect(Contract contract, Class<?> type) throws InvalidInterfaceException;
-    /**
-     * @param contract
-     * @param type
-     * @param callback
-     * @throws InvalidInterfaceException
-     */
-    void introspect(Contract contract, Class<?> type, Class<?> callback) throws InvalidInterfaceException;
-
+    JavaInterface introspect(Class<?> type) throws InvalidInterfaceException;
+    
 }

Modified: incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceProcessor.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/JavaInterfaceProcessor.java Tue Apr 10 18:34:51 2007
@@ -35,7 +35,7 @@
      * @param contract
      * @throws InvalidInterfaceException
      */
-    void visitInterface(Class<?> clazz, Class<?> callbackClass, Contract contract)
+    void visitInterface(Class<?> clazz)
         throws InvalidInterfaceException;
 
 }

Modified: incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImpl.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImpl.java Tue Apr 10 18:34:51 2007
@@ -24,7 +24,6 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.tuscany.assembly.Contract;
 import org.apache.tuscany.interfacedef.DataType;
 import org.apache.tuscany.interfacedef.InvalidCallbackException;
 import org.apache.tuscany.interfacedef.InvalidInterfaceException;
@@ -35,7 +34,6 @@
 import org.apache.tuscany.interfacedef.impl.OperationImpl;
 import org.apache.tuscany.interfacedef.java.JavaFactory;
 import org.apache.tuscany.interfacedef.java.JavaInterface;
-import org.apache.tuscany.interfacedef.java.JavaInterfaceContract;
 import org.apache.tuscany.interfacedef.java.impl.DefaultJavaFactory;
 import org.apache.tuscany.interfacedef.java.introspection.JavaInterfaceProcessor;
 import org.apache.tuscany.interfacedef.java.introspection.JavaInterfaceProcessorRegistry;
@@ -69,7 +67,16 @@
         processors.remove(processor);
     }
 
-    public void introspect(Contract contract, Class<?> type) throws InvalidInterfaceException {
+    public JavaInterface introspect(Class<?> type) throws InvalidInterfaceException {
+        JavaInterface javaInterface = javaFactory.createJavaInterface();
+        javaInterface.setJavaClass(type);
+
+        boolean remotable = type.isAnnotationPresent(Remotable.class);
+        javaInterface.setRemotable(remotable);
+        
+        boolean conversational = type.isAnnotationPresent(Conversational.class);
+        javaInterface.setConversational(conversational);
+        
         Class<?> callbackClass = null;
         org.osoa.sca.annotations.Callback callback = type.getAnnotation(org.osoa.sca.annotations.Callback.class);
         if (callback != null && !Void.class.equals(callback.value())) {
@@ -77,32 +84,14 @@
         } else if (callback != null && Void.class.equals(callback.value())) {
             throw new InvalidCallbackException("No callback interface specified on annotation");
         }
-        introspect(contract, type, callbackClass);
-    }
-
-    public void introspect(Contract contract, Class<?> type, Class<?> callback) throws InvalidInterfaceException {
-        JavaInterface javaInterface = javaFactory.createJavaInterface();
-        javaInterface.setJavaClass(type);
-        boolean remotable = type.isAnnotationPresent(Remotable.class);
-        javaInterface.setRemotable(remotable);
-        // Scope interactionScope = type.getAnnotation(Scope.class);
-        boolean conversational = type.isAnnotationPresent(Conversational.class);
-        javaInterface.setConversational(conversational);
-        JavaInterfaceContract javaInterfaceContract = javaFactory.createJavaInterfaceContract();
-        contract.setInterfaceContract(javaInterfaceContract);
-        javaInterfaceContract.setInterface(javaInterface);
+        javaInterface.setCallbackClass(callbackClass);
+        
         javaInterface.getOperations().addAll(getOperations(type, remotable, conversational).values());
 
-        if (callback != null) {
-            JavaInterface callbackInterface = javaFactory.createJavaInterface();
-            callbackInterface.setJavaClass(callback);
-            javaInterfaceContract.setCallbackInterface(callbackInterface);
-            callbackInterface.getOperations().addAll(getOperations(callback, remotable, conversational).values());
-        }
-
         for (JavaInterfaceProcessor processor : processors) {
-            processor.visitInterface(type, callback, contract);
+            processor.visitInterface(type);
         }
+        return javaInterface;
     }
 
     private <T> Map<String, Operation> getOperations(Class<T> type, boolean remotable, boolean conversational)

Modified: incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/xml/JavaInterfaceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/xml/JavaInterfaceProcessor.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/xml/JavaInterfaceProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-xml/src/main/java/org/apache/tuscany/interfacedef/java/xml/JavaInterfaceProcessor.java Tue Apr 10 18:34:51 2007
@@ -27,10 +27,13 @@
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.tuscany.assembly.xml.Constants;
+import org.apache.tuscany.interfacedef.InvalidInterfaceException;
 import org.apache.tuscany.interfacedef.java.JavaFactory;
 import org.apache.tuscany.interfacedef.java.JavaInterface;
 import org.apache.tuscany.interfacedef.java.JavaInterfaceContract;
 import org.apache.tuscany.interfacedef.java.impl.DefaultJavaFactory;
+import org.apache.tuscany.interfacedef.java.introspection.JavaInterfaceProcessorRegistry;
+import org.apache.tuscany.interfacedef.java.introspection.impl.JavaInterfaceProcessorRegistryImpl;
 import org.apache.tuscany.services.spi.contribution.ArtifactResolver;
 import org.apache.tuscany.services.spi.contribution.ContributionReadException;
 import org.apache.tuscany.services.spi.contribution.ContributionResolveException;
@@ -41,34 +44,37 @@
 public class JavaInterfaceProcessor implements StAXArtifactProcessor<JavaInterfaceContract>, JavaConstants {
 
     private JavaFactory javaFactory;
+    private JavaInterfaceProcessorRegistry introspectionRegistry;
 
-    public JavaInterfaceProcessor(JavaFactory javaFactory) {
+    public JavaInterfaceProcessor(JavaFactory javaFactory, JavaInterfaceProcessorRegistry introspectionRegistry) {
         this.javaFactory = javaFactory;
+        this.introspectionRegistry = introspectionRegistry;
     }
     
     public JavaInterfaceProcessor() {
-        this(new DefaultJavaFactory());
+        this(new DefaultJavaFactory(), new JavaInterfaceProcessorRegistryImpl());
+    }
+    
+    private JavaInterface createJavaInterface(String interfaceName) {
+        JavaInterface javaInterface = javaFactory.createJavaInterface();
+        javaInterface.setUnresolved(true);
+        javaInterface.setName(interfaceName);
+        return javaInterface;
     }
 
     public JavaInterfaceContract read(XMLStreamReader reader) throws ContributionReadException {
         try {
-            
-    
             // Read an <interface.java>
             JavaInterfaceContract javaInterfaceContract = javaFactory.createJavaInterfaceContract();
             String interfaceName = reader.getAttributeValue(null, INTERFACE);
             if (interfaceName != null) {
-                JavaInterface javaInterface = javaFactory.createJavaInterface();
-                javaInterface.setUnresolved(true);
-                javaInterface.setName(interfaceName);
+                JavaInterface javaInterface = createJavaInterface(interfaceName);
                 javaInterfaceContract.setInterface(javaInterface);
             }
 
             String callbackInterfaceName = reader.getAttributeValue(null, CALLBACK_INTERFACE);
             if (callbackInterfaceName != null) {
-                JavaInterface javaCallbackInterface = javaFactory.createJavaInterface();
-                javaCallbackInterface.setUnresolved(true);
-                javaCallbackInterface.setName(callbackInterfaceName);
+                JavaInterface javaCallbackInterface = createJavaInterface(callbackInterfaceName);
                 javaInterfaceContract.setCallbackInterface(javaCallbackInterface);
             }
     
@@ -90,11 +96,11 @@
             // Write an <interface.java>
             writer.writeStartElement(Constants.SCA10_NS, INTERFACE_JAVA);
             JavaInterface javaInterface = (JavaInterface)javaInterfaceContract.getInterface();
-            if (javaInterface.getName() != null) {
+            if (javaInterface != null && javaInterface.getName() != null) {
                 writer.writeAttribute(INTERFACE, javaInterface.getName());
             }
             JavaInterface javaCallbackInterface = (JavaInterface)javaInterfaceContract.getCallbackInterface();
-            if (javaCallbackInterface.getName() != null) {
+            if (javaCallbackInterface != null && javaCallbackInterface.getName() != null) {
                 writer.writeAttribute(CALLBACK_INTERFACE, javaCallbackInterface.getName());
             }
             writer.writeEndElement();
@@ -104,8 +110,43 @@
         }
     }
     
-    public void resolve(JavaInterfaceContract model, ArtifactResolver resolver) throws ContributionResolveException {
-        // TODO Auto-generated method stub
+    private JavaInterface resolveJavaInterface(JavaInterface javaInterface, ArtifactResolver resolver) throws ContributionResolveException {
+        
+        if (javaInterface != null && javaInterface.isUnresolved()) {
+
+            // Resolve the Java interface
+            javaInterface = resolver.resolve(JavaInterface.class, javaInterface);
+            if (javaInterface.isUnresolved()) {
+
+                // If the Java interface has never been resolved yet, do it now
+                Class javaClass;
+                try {
+                    javaClass = Class.forName(javaInterface.getName(), true, Thread.currentThread().getContextClassLoader());
+                        
+                    // Introspect the Java interface and populate the interface and
+                    // operations
+                    javaInterface = introspectionRegistry.introspect(javaClass);
+                
+                } catch (ClassNotFoundException e) {
+                    throw new ContributionResolveException(e);
+                } catch (InvalidInterfaceException e) {
+                    throw new ContributionResolveException(e);
+                }
+                
+                resolver.add(javaInterface);
+            }
+        }
+        return javaInterface;
+    }
+    
+    public void resolve(JavaInterfaceContract javaInterfaceContract, ArtifactResolver resolver) throws ContributionResolveException {
+        
+        // Resolve the interface and callback interface
+        JavaInterface javaInterface = resolveJavaInterface((JavaInterface)javaInterfaceContract.getInterface(), resolver);
+        javaInterfaceContract.setInterface(javaInterface);
+        
+        JavaInterface javaCallbackInterface = resolveJavaInterface((JavaInterface)javaInterfaceContract.getCallbackInterface(), resolver);
+        javaInterfaceContract.setCallbackInterface(javaCallbackInterface);
     }
     
     public void wire(JavaInterfaceContract model) throws ContributionWireException {

Modified: incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/ConversationalIntrospectionTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/ConversationalIntrospectionTestCase.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/ConversationalIntrospectionTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/ConversationalIntrospectionTestCase.java Tue Apr 10 18:34:51 2007
@@ -21,12 +21,10 @@
 import junit.framework.TestCase;
 
 import org.apache.tuscany.assembly.AssemblyFactory;
-import org.apache.tuscany.assembly.Contract;
 import org.apache.tuscany.assembly.impl.DefaultAssemblyFactory;
 import org.apache.tuscany.interfacedef.Interface;
 import org.apache.tuscany.interfacedef.InvalidOperationException;
 import org.apache.tuscany.interfacedef.Operation;
-import org.apache.tuscany.interfacedef.java.introspection.impl.JavaInterfaceProcessorRegistryImpl;
 import org.osoa.sca.annotations.Conversational;
 import org.osoa.sca.annotations.EndsConversation;
 
@@ -47,9 +45,7 @@
     }
 
     public void testServiceContractConversationalInformationIntrospection() throws Exception {
-        Contract contract = factory.createComponentService();
-        registry.introspect(contract, Foo.class);
-        Interface i = contract.getInterfaceContract().getInterface();
+        Interface i = registry.introspect(Foo.class);
         assertNotNull(i);
         assertTrue(i.isConversational());
         Operation.ConversationSequence seq = getOperation(i, "operation").getConversationSequence();
@@ -60,8 +56,7 @@
 
     public void testBadServiceContract() throws Exception {
         try {
-            Contract contract = factory.createComponentService();
-            registry.introspect(contract, BadFoo.class);
+            registry.introspect(BadFoo.class);
             fail();
         } catch (InvalidOperationException e) {
             // expected
@@ -69,10 +64,9 @@
     }
 
     public void testNonConversationalInformationIntrospection() throws Exception {
-        Contract contract = factory.createComponentService();
-        registry.introspect(contract, NonConversationalFoo.class);
-        assertFalse(contract.getInterfaceContract().getInterface().isConversational());
-        Operation.ConversationSequence seq = getOperation(contract.getInterfaceContract().getInterface(), "operation")
+        Interface i = registry.introspect(NonConversationalFoo.class);
+        assertFalse(i.isConversational());
+        Operation.ConversationSequence seq = getOperation(i, "operation")
             .getConversationSequence();
         assertEquals(Operation.ConversationSequence.NO_CONVERSATION, seq);
     }

Modified: incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImplTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImplTestCase.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImplTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-xml/src/test/java/org/apache/tuscany/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImplTestCase.java Tue Apr 10 18:34:51 2007
@@ -21,7 +21,6 @@
 import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.isA;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
 
@@ -30,27 +29,19 @@
 
 import junit.framework.TestCase;
 
-import org.apache.tuscany.assembly.AssemblyFactory;
-import org.apache.tuscany.assembly.Contract;
-import org.apache.tuscany.assembly.impl.DefaultAssemblyFactory;
 import org.apache.tuscany.interfacedef.DataType;
 import org.apache.tuscany.interfacedef.InvalidInterfaceException;
 import org.apache.tuscany.interfacedef.Operation;
 import org.apache.tuscany.interfacedef.java.JavaInterface;
-import org.easymock.EasyMock;
 
 /**
  * @version $Rev$ $Date$
  */
 public class JavaInterfaceProcessorRegistryImplTestCase extends TestCase {
     private JavaInterfaceProcessorRegistryImpl impl;
-    private AssemblyFactory factory = new DefaultAssemblyFactory();
 
     public void testSimpleInterface() throws InvalidInterfaceException {
-        Contract contract = factory.createComponentService();
-        impl.introspect(contract, Simple.class);
-
-        JavaInterface intf = (JavaInterface)contract.getInterfaceContract().getInterface();
+        JavaInterface intf = (JavaInterface)impl.introspect(Simple.class);
 
         assertEquals(Simple.class, intf.getJavaClass());
         List<Operation> operations = intf.getOperations();
@@ -77,14 +68,13 @@
 
     public void testUnregister() throws Exception {
         org.apache.tuscany.interfacedef.java.introspection.JavaInterfaceProcessor processor = createMock(org.apache.tuscany.interfacedef.java.introspection.JavaInterfaceProcessor.class);
-        processor.visitInterface(eq(Base.class), EasyMock.same((Class)null), isA(Contract.class));
+        processor.visitInterface(eq(Base.class));
         expectLastCall().once();
         replay(processor);
-        Contract contract = factory.createComponentService();
         impl.registerProcessor(processor);
-        impl.introspect(contract, Base.class);
+        impl.introspect(Base.class);
         impl.unregisterProcessor(processor);
-        impl.introspect(contract, Base.class);
+        impl.introspect(Base.class);
         verify(processor);
     }
 

Modified: incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/JavaInterface.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/JavaInterface.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/JavaInterface.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/JavaInterface.java Tue Apr 10 18:34:51 2007
@@ -55,4 +55,17 @@
      */
     void setJavaClass(Class<?> javaClass);
 
+    /**
+     * Returns the callback class specified in an @Callback annotation.
+     * 
+     * @return the callback class specified in an @Callback annotation
+     */
+    Class<?> getCallbackClass();
+
+    /**
+     * Sets the callback class specified in an @Callback annotation.
+     * 
+     * @param callbackClass the callback class specified in an @Callback annotation
+     */
+    void setCallbackClass(Class<?> callbackClass);
 }

Modified: incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/impl/JavaInterfaceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/impl/JavaInterfaceImpl.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/impl/JavaInterfaceImpl.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/interfacedef/java/impl/JavaInterfaceImpl.java Tue Apr 10 18:34:51 2007
@@ -30,6 +30,7 @@
 
     private String className;
     private Class<?> javaClass;
+    private Class<?> callbackClass;
 
     public String getName() {
         if (isUnresolved()) {
@@ -54,6 +55,14 @@
 
     public void setJavaClass(Class<?> javaClass) {
         this.javaClass = javaClass;
+    }
+    
+    public Class<?> getCallbackClass() {
+        return callbackClass;
+    }
+    
+    public void setCallbackClass(Class<?> callbackClass) {
+        this.callbackClass = callbackClass;
     }
     
     public String toString() {

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java?view=diff&rev=527362&r1=527361&r2=527362
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java Tue Apr 10 18:34:51 2007
@@ -21,12 +21,14 @@
 
 import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
 
+import javax.wsdl.PortType;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.tuscany.assembly.xml.Constants;
+import org.apache.tuscany.interfacedef.wsdl.WSDLDefinition;
 import org.apache.tuscany.interfacedef.wsdl.WSDLFactory;
 import org.apache.tuscany.interfacedef.wsdl.WSDLInterface;
 import org.apache.tuscany.interfacedef.wsdl.WSDLInterfaceContract;
@@ -141,7 +143,48 @@
         }
     }
     
-    public void resolve(WSDLInterfaceContract wsdlInterface, ArtifactResolver resolver) throws ContributionResolveException {
+    private WSDLInterface resolveWSDLInterface(WSDLInterface wsdlInterface, ArtifactResolver resolver) {
+        
+        if (wsdlInterface != null && wsdlInterface.isUnresolved()) {
+
+            // Resolve the WSDL interface
+            wsdlInterface = resolver.resolve(WSDLInterface.class, wsdlInterface);
+            if (wsdlInterface.isUnresolved()) {
+
+                // If the WSDL interface has never been resolved yet, do it now
+                // First, resolve the WSDL definition for the given namespace
+                WSDLDefinition wsdlDefinition = wsdlFactory.createWSDLDefinition();
+                wsdlDefinition.setNamespace(wsdlInterface.getName().getNamespaceURI());
+                wsdlDefinition = resolver.resolve(WSDLDefinition.class, wsdlDefinition);
+                if (!wsdlDefinition.isUnresolved()) {
+                    PortType portType = wsdlDefinition.getDefinition().getPortType(wsdlInterface.getName());
+                    if (portType != null) {
+                        
+                        // Add the resolved WSDL interface to the resolver
+                        // so that it's found next time
+                        wsdlInterface.setPortType(portType);
+                        
+                        // Introspect the WSDL portType and populate the interface and
+                        // operations
+                        //FIXME
+                        
+                        wsdlInterface.setUnresolved(false);
+                        resolver.add(wsdlInterface);
+                    }
+                }
+            }
+        }
+        return wsdlInterface;
+    }
+    
+    public void resolve(WSDLInterfaceContract wsdlInterfaceContract, ArtifactResolver resolver) throws ContributionResolveException {
+        
+        // Resolve the interface and callback interface
+        WSDLInterface wsdlInterface = resolveWSDLInterface((WSDLInterface)wsdlInterfaceContract.getInterface(), resolver);
+        wsdlInterfaceContract.setInterface(wsdlInterface);
+        
+        WSDLInterface wsdlCallbackInterface = resolveWSDLInterface((WSDLInterface)wsdlInterfaceContract.getCallbackInterface(), resolver);
+        wsdlInterfaceContract.setCallbackInterface(wsdlCallbackInterface);
     }
     
     public void wire(WSDLInterfaceContract model) throws ContributionWireException {



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org