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