You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by is...@apache.org on 2006/12/07 21:59:06 UTC

svn commit: r483662 - in /incubator/tuscany/java/sca/kernel/core/src: main/java/org/apache/tuscany/core/implementation/java/ main/java/org/apache/tuscany/core/wire/jdk/ test/java/org/apache/tuscany/core/implementation/java/integration/

Author: isilval
Date: Thu Dec  7 12:59:05 2006
New Revision: 483662

URL: http://svn.apache.org/viewvc?view=rev&rev=483662
Log:
Adding test case to check for NoRegisteredCallbackException and wrapping it
in an InvocationTargetException

Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaTargetInvoker.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaTargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaTargetInvoker.java?view=diff&rev=483662&r1=483661&r2=483662
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaTargetInvoker.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaTargetInvoker.java Thu Dec  7 12:59:05 2006
@@ -70,8 +70,9 @@
         try {
             Object instance = getInstance(sequence);
             if (callbackClass != null && !callbackClass.isInstance(instance)) {
-                throw new NoRegisteredCallbackException("Instance is does not implement callback: "
-                                                        + callbackClass.toString());
+                throw new InvocationTargetException(
+                        new NoRegisteredCallbackException("Instance is does not implement callback: "
+                                                        + callbackClass.toString()));
             }
             if (!operation.getDeclaringClass().isInstance(instance)) {
                 Set<Method> methods = getAllUniquePublicProtectedMethods(instance.getClass());

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java?view=diff&rev=483662&r1=483661&r2=483662
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java Thu Dec  7 12:59:05 2006
@@ -23,6 +23,7 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.LinkedList;
 import java.util.Map;
@@ -38,6 +39,7 @@
 import org.apache.tuscany.spi.wire.OutboundInvocationChain;
 import org.apache.tuscany.spi.wire.TargetInvoker;
 import org.apache.tuscany.spi.wire.WireInvocationHandler;
+import org.osoa.sca.NoRegisteredCallbackException;
 
 
 /**
@@ -94,7 +96,16 @@
         Operation operation = findOperation(method, sourceCallbackInvocationChains.keySet());
         OutboundInvocationChain chain = sourceCallbackInvocationChains.get(operation);
         TargetInvoker invoker = chain.getTargetInvoker();
-        return invoke(chain, invoker, args, correlationId, callbackRoutingChain);
+        
+        try {
+            return invoke(chain, invoker, args, correlationId, callbackRoutingChain);
+        } catch(InvocationTargetException e) {
+            Throwable t = e.getCause();
+            if (t instanceof NoRegisteredCallbackException) {
+                throw t;
+            }
+            throw e;
+        }
     }
 
 

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java?view=diff&rev=483662&r1=483661&r2=483662
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java Thu Dec  7 12:59:05 2006
@@ -22,6 +22,7 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 
+import org.osoa.sca.NoRegisteredCallbackException;
 import org.osoa.sca.annotations.Callback;
 
 import org.apache.tuscany.spi.builder.Connector;
@@ -104,6 +105,34 @@
     }
 
     /**
+     * Verifies exception is thrown when callback is not implemented
+     */
+    public void testCallbackNotRegistered() throws Exception {
+        ComponentDefinition<JavaImplementation> targetDefinition = createTarget();
+        JavaAtomicComponent fooComponent =
+            (JavaAtomicComponent) builder.build(null, targetDefinition, context);
+        wireService.createWires(fooComponent, targetDefinition);
+        container.register(fooComponent);
+
+        CompositeComponent parent = createMock(CompositeComponent.class);
+        parent.getChild(isA(String.class));
+        expectLastCall().andReturn(fooComponent).anyTimes();
+        replay(parent);
+
+        ComponentDefinition<JavaImplementation> sourceDefinition = createPlainSource("fooPlainClient");
+        JavaAtomicComponent clientComponent =
+            (JavaAtomicComponent) builder.build(parent, sourceDefinition, context);
+        wireService.createWires(clientComponent, sourceDefinition);
+        container.register(clientComponent);
+
+        Connector connector = new ConnectorImpl(new JDKWireService(), null, scheduler , workContext);
+
+        connector.connect(clientComponent);
+        FooPlainClient client = (FooPlainClient) clientComponent.getServiceInstance();
+        client.invoke();
+    }
+
+    /**
      * Verifies a callback in response to an invocation from two different client components is routed back to the
      * appropriate client.
      */
@@ -164,7 +193,7 @@
     }
 
     private ComponentDefinition<JavaImplementation> createSource(String name)
-        throws NoSuchMethodException, URISyntaxException, InvalidServiceContractException {
+    throws NoSuchMethodException, URISyntaxException, InvalidServiceContractException {
         ConstructorDefinition<FooClient> ctorDef =
             new ConstructorDefinition<FooClient>(FooClient.class.getConstructor());
         PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>> type =
@@ -189,10 +218,37 @@
         return def;
     }
 
+    private ComponentDefinition<JavaImplementation> createPlainSource(String name)
+    throws NoSuchMethodException, URISyntaxException, InvalidServiceContractException {
+        ConstructorDefinition<FooPlainClient> ctorDef =
+            new ConstructorDefinition<FooPlainClient>(FooPlainClient.class.getConstructor());
+        PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>> type =
+            new PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>>();
+        type.setConstructorDefinition(ctorDef);
+        type.setImplementationScope(Scope.MODULE);
+        Method method = FooPlainClient.class.getMethod("setFoo", Foo.class);
+        JavaInterfaceProcessorRegistry registry = new JavaInterfaceProcessorRegistryImpl();
+        ServiceContract<?> contract = registry.introspect(Foo.class);
+        contract.setCallbackClass(FooCallback.class);
+        contract.setCallbackName("callback");
+        JavaMappedReference mappedReference = new JavaMappedReference("foo", contract, method);
+        type.getReferences().put("foo", mappedReference);
+        ReferenceTarget refTarget = new ReferenceTarget();
+        refTarget.setReferenceName("foo");
+        refTarget.getTargets().add(new URI("foo"));
+        JavaImplementation impl = new JavaImplementation();
+        impl.setComponentType(type);
+        impl.setImplementationClass(FooPlainClient.class);
+        ComponentDefinition<JavaImplementation> def = new ComponentDefinition<JavaImplementation>(name, impl);
+        def.getReferenceTargets().put("foo", refTarget);
+        return def;
+    }
+
     @Callback(FooCallback.class)
     public static interface Foo {
         void call();
         void callMultiCallback();
+        void callFromPlain();
     }
 
     public static class FooImpl implements Foo {
@@ -214,6 +270,17 @@
             callback.multiCallback();
             callback.multiCallback();
         }
+
+        public void callFromPlain() {
+            try {
+                callback.callback();
+                fail();
+            } catch (NoRegisteredCallbackException e) {
+                // expected
+            } catch (Throwable e) {
+                e.printStackTrace();
+            }
+        }
     }
 
     public static class FooClient implements FooCallback {
@@ -252,6 +319,30 @@
     public interface FooCallback {
         void callback();
         void multiCallback();
+    }
+
+    public static class FooPlainClient /* implements FooCallback */ { // do NOT implement the callback
+
+        private Foo foo;
+
+        public FooPlainClient() {
+        }
+
+        public void setFoo(Foo foo) {
+            this.foo = foo;
+        }
+
+        public void invoke() {
+            foo.callFromPlain();
+        }
+        
+        public void callback() {
+            
+        }
+        
+        public void multiCallback() {
+            
+        }
     }
 
     protected void setUp() throws Exception {



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