Hi Simon, I adapted my code as you suggested. It seems like the error has dissappeared, but I got new ones. Well I removed the setter and getter of messageInterpreterCallback from MessageInterpreterImpl. Now my MessageInterpreterImpl class contains only the instance variable messageInterpreterCallback . I have made it a protected variable.
I get a HTTP Internal Server ( error 500). I am still missing something.SCA runtime is supposed "automatically" inject my callback instance in the messageInterpreterCallback member variable of MessageInterpreterImpl. The MessageInterpreterImpl needs to have a reference to some callback instance. I can;t seem to solve this problem. This is the error.... --------------------------------------- SEVERE: Exception invoking injector - null org.oasisopen.sca.ServiceRuntimeException: Exception invoking injector - null at org.apache.tuscany.sca.implementation.java.invocation.JavaImplementationInvoker.invoke(JavaImplementationInvoker.java:208) at org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:86) at org.apache.tuscany.sca.core.invocation.RuntimeInvoker.invoke(RuntimeInvoker.java:91) at org.apache.tuscany.sca.core.invocation.RuntimeInvoker.invoke(RuntimeInvoker.java:74) at org.apache.tuscany.sca.core.assembly.impl.RuntimeEndpointImpl.invoke(RuntimeEndpointImpl.java:286) at org.apache.tuscany.sca.binding.ws.jaxws.JAXWSBindingProvider.invoke(JAXWSBindingProvider.java:207) at org.apache.tuscany.sca.binding.ws.jaxws.JAXWSBindingProvider.invoke(JAXWSBindingProvider.java:61) at com.sun.xml.internal.ws.api.server.InstanceResolver$1.invokeProvider(InstanceResolver.java:245) at com.sun.xml.internal.ws.server.InvokerTube$2.invokeProvider(InvokerTube.java:145) at com.sun.xml.internal.ws.server.provider.SyncProviderInvokerTube.processRequest(SyncProviderInvokerTube.java:67) at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587) at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546) at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531) at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428) at com.sun.xml.internal.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:232) at com.sun.xml.internal.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:460) at com.sun.xml.internal.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:233) at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:95) at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handle(WSHttpHandler.java:80) at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:65) at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:65) at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:68) at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:555) at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:65) at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:527) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: org.apache.tuscany.sca.core.factory.ObjectCreationException: Exception invoking injector - null at org.apache.tuscany.sca.implementation.java.invocation.JavaImplementationInvoker.injectCallbacks(JavaImplementationInvoker.java:235) at org.apache.tuscany.sca.implementation.java.invocation.JavaImplementationInvoker.invoke(JavaImplementationInvoker.java:106) ... 27 more Caused by: java.lang.NullPointerException at org.apache.tuscany.sca.core.context.impl.CallbackServiceReferenceImpl.init(CallbackServiceReferenceImpl.java:64) at org.apache.tuscany.sca.core.context.impl.CallbackServiceReferenceImpl.<init>(CallbackServiceReferenceImpl.java:47) at org.apache.tuscany.sca.core.invocation.impl.JDKProxyFactory.createCallbackProxy(JDKProxyFactory.java:137) at org.apache.tuscany.sca.core.invocation.ExtensibleProxyFactory.createCallbackProxy(ExtensibleProxyFactory.java:76) at org.apache.tuscany.sca.core.invocation.CallbackWireObjectFactory.getInstance(CallbackWireObjectFactory.java:45) at org.apache.tuscany.sca.implementation.java.injection.MethodInjector.inject(MethodInjector.java:55) at org.apache.tuscany.sca.implementation.java.invocation.JavaImplementationInvoker.injectCallbacks(JavaImplementationInvoker.java:230) ... 28 more 10-jan-2011 1:39:26 com.sun.xml.internal.ws.server.provider.SyncProviderInvokerTube processRequest SEVERE: The server sent HTTP status code 500: Internal Server Error com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 500: Internal Server Error at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.checkStatusCodeOneway(HttpTransportPipe.java:207) at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:164) at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83) at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105) at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587) at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546) at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531) at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428) at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211) at com.sun.xml.internal.ws.client.dispatch.DispatchImpl.invokeOneWay(DispatchImpl.java:204) at org.apache.tuscany.sca.binding.ws.jaxws.JAXWSBindingInvoker.invokeTarget(JAXWSBindingInvoker.java:224) at org.apache.tuscany.sca.binding.ws.jaxws.JAXWSBindingInvoker.invoke(JAXWSBindingInvoker.java:149) at org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:86) at org.apache.tuscany.sca.core.invocation.impl.JDKInvocationHandler.invoke(JDKInvocationHandler.java:298) at org.apache.tuscany.sca.core.invocation.impl.JDKInvocationHandler.invoke(JDKInvocationHandler.java:254) at org.apache.tuscany.sca.core.invocation.impl.JDKInvocationHandler.invoke(JDKInvocationHandler.java:114) at org.apache.tuscany.sca.core.invocation.impl.AsyncJDKInvocationHandler.doInvokeSync(AsyncJDKInvocationHandler.java:238) at org.apache.tuscany.sca.core.invocation.impl.AsyncJDKInvocationHandler.invoke(AsyncJDKInvocationHandler.java:160) at $Proxy50.interpret(Unknown Source) at org.acme.logix.LogisticCenterImpl.processMessage(LogisticCenterImpl.java:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.tuscany.sca.implementation.java.invocation.JavaImplementationInvoker.invoke(JavaImplementationInvoker.java:158) at org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:86) at org.apache.tuscany.sca.core.invocation.RuntimeInvoker.invoke(RuntimeInvoker.java:91) at org.apache.tuscany.sca.core.invocation.RuntimeInvoker.invoke(RuntimeInvoker.java:74) at org.apache.tuscany.sca.core.assembly.impl.RuntimeEndpointImpl.invoke(RuntimeEndpointImpl.java:286) at org.apache.tuscany.sca.binding.ws.jaxws.JAXWSBindingProvider.invoke(JAXWSBindingProvider.java:207) at org.apache.tuscany.sca.binding.ws.jaxws.JAXWSBindingProvider.invoke(JAXWSBindingProvider.java:61) at com.sun.xml.internal.ws.api.server.InstanceResolver$1.invokeProvider(InstanceResolver.java:245) at com.sun.xml.internal.ws.server.InvokerTube$2.invokeProvider(InvokerTube.java:145) at com.sun.xml.internal.ws.server.provider.SyncProviderInvokerTube.processRequest(SyncProviderInvokerTube.java:67) at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587) at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546) at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531) at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428) at com.sun.xml.internal.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:232) at com.sun.xml.internal.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:460) at com.sun.xml.internal.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:233) at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:95) at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handle(WSHttpHandler.java:80) at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:65) at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:65) at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:68) at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:555) at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:65) at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:527) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) ----------------------------------------- Hope you can help me. (?) Kind Regards Urso 2011/1/9 Simon Nash <[email protected]> > Urso Wieske wrote: > >> Hi >> I am evaluating Tuscany 2.0 Beta1 and am trying to learn more about >> Callbacks (Bi-Directional interface) of SCA 1.1. I downloaded the Tuscany >> Sample files and started to explore the callback implementations with >> webservice binding, i.e. the Search and SearchCallback interfaces. >> It took me a while before I realized that the Tuscany SCA Samples were >> based on SCA v1.0. Tuscany 2.0 Beta1 is based on the SCA v1.1 specs. >> After studying the sample sources, I have written my own callback. >> >> Unfortunately, I kept on getting a runtime exception after I installed and >> deployed my contribution. By the way, I am using Eclipse and the maven >> tuscany plugin. >> >> I can't find the problem and hope if someone can point me in the right >> direction. >> >> This is the error (printed on my console) I am getting when I try to run >> my program: >> [ERROR] Failed to execute goal >> org.apache.tuscany.maven.plugins:maven-tuscany-plugin:2.0-Beta1:run >> (default-cli) on project handler-agent: Execution default-cli of goal >> org.apache.tuscany.maven.plugins:maven-tuscany-plugin:2.0-Beta1:run failed: >> org.oasisopen.sca.ServiceRuntimeException: [Composite: { >> http://docs.oasis-open.org/ns/opencsa/sca/200912}, Component: >> MessageInterpreterComponent] - [ASM60033] No targets for reference: >> Composite = {http://docs.oasis-open.org/ns/opencsa/sca/200912} Reference >> = messageInterpreterCallback -> [Help 1] >> >> I suspect that I am doing something wrong in the composite file. I can't >> imagine I did something wrong in the java sources. (See below for the >> sources.) >> > Because the MessageInterpreterImpl class doesn't contain any @Reference or > @Property annotations, SCA creates implicit references for all public > setter methods in this class whose type is a remotable SCA interface, and > also for all public or protected fields in this class whose type is a > remotable SCA interface. > > There is a public setter method setMessageInterpreterCallback() and a > protected field messageInterpreterCallback, so SCA defines a reference > named messageInterpreterCallback. This reference doesn't have a target > configured in the composite, hence the error message. > > To fix the problem, you need to remove the setter method (or make it > protected) and change the field from protected to private. > > Simon > > >> Kind Regards, >> >> Urso >> >> >> -------------------- THE SERVICE Interface With Callback Interface >> association ---------- >> /** >> * */ >> package org.acme.logix; >> >> import org.acme.logix.message.Message; >> import org.oasisopen.sca.annotation.Callback; >> import org.oasisopen.sca.annotation.OneWay; >> import org.oasisopen.sca.annotation.Remotable; >> >> /** >> * * >> */ >> @Remotable >> @Callback(MessageInterpreterCallback.class) >> public interface MessageInterpreter { >> >> @OneWay >> void interpret(Message msg); >> } >> >> >> /** >> * */ >> package org.acme.logix; >> >> import org.oasisopen.sca.annotation.OneWay; >> import org.oasisopen.sca.annotation.Remotable; >> >> /** >> * * >> */ >> @Remotable >> public interface MessageInterpreterCallback { >> void onInterpret(Interpretation ipr); >> } >> >> >> ---------- THE CLIENT implementing the callback interface ------------ >> >> /** >> * */ >> package org.acme.logix; >> >> import org.acme.logix.message.Message; >> import org.oasisopen.sca.annotation.Reference; >> >> /** >> * */ >> public class LogisticCenterImpl implements LogisticCenter, >> MessageInterpreterCallback { >> private AuditService auditService; >> @Reference >> protected MessageInterpreter messageInterpreter; >> >> /* (non-Javadoc) >> * @see >> org.acme.logix.LogisticCenter#processMessage(org.acme.logix.message.Message) >> */ >> public void processMessage(Message message) { >> System.out.println("Processing message with payload " + >> message.getPayload() ); >> auditService.logSentMessage(message); >> messageInterpreter.interpret(message); >> } >> >> /** >> * @return the auditService >> */ >> public AuditService getAuditService() { >> return auditService; >> } >> >> /** >> * @param auditService the auditService to set >> */ >> @Reference >> public void setAuditService(AuditService auditService) { >> this.auditService = auditService; >> } >> >> /** >> * @param messageInterpreter the messageInterpreter to set >> */ >> public void setMessageInterpreter(MessageInterpreter messageInterpreter) { >> this.messageInterpreter = messageInterpreter; >> } >> >> /** >> * @return the messageInterpreter >> */ >> public MessageInterpreter getMessageInterpreter() { >> return messageInterpreter; >> } >> >> >> /** >> * THE CALLBACK method of MessageInterpreterCallback interface >> */ >> public void onInterpret(Interpretation ipr) { >> System.out.println("Message has been interpreted."); >> } >> >> } >> >> >> ---------THE SERVICE WHICH IS CALLED BY THE CLIENT THROUGH WEBSERVICE >> BINDING --------- >> >> /** >> * */ >> package org.acme.logix; >> >> import org.acme.logix.message.Message; >> import org.oasisopen.sca.RequestContext; >> import org.oasisopen.sca.ServiceReference; >> import org.oasisopen.sca.annotation.Callback; >> import org.oasisopen.sca.annotation.Context; >> import org.oasisopen.sca.annotation.Reference; >> import org.oasisopen.sca.annotation.Service; >> >> /** >> * * >> */ >> public class MessageInterpreterImpl implements MessageInterpreter{ >> >> @Callback >> protected MessageInterpreterCallback messageInterpreterCallback; >> /* (non-Javadoc) >> * @see >> org.acme.logix.MessageInterpreter#interpret(org.acme.logix.message.Message) >> */ >> public void interpret(Message msg) { >> System.out.println("The message is being interpreted.."); >> Interpretation ipr = new Interpretation(); >> messageInterpreterCallback.onInterpret(ipr); >> } >> >> >> >> /** >> * @return the messageInterpreterCallback >> */ >> public MessageInterpreterCallback getMessageInterpreterCallback() { >> return messageInterpreterCallback; >> } >> >> >> >> /** >> * @param messageInterpreterCallback the messageInterpreterCallback to set >> */ >> public void setMessageInterpreterCallback( >> MessageInterpreterCallback messageInterpreterCallback) { >> this.messageInterpreterCallback = messageInterpreterCallback; >> } >> } >> >> >> >> >> >> ---- THE COMPOSITE ----------- >> >> >> >> <composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912" >> targetNamespace="http://logistix" >> xmlns:logistix="http://logistix" >> name="AfnemerLogisticCenter"> >> >> <component name="AfnemerHandlingAgentComponent"> >> <implementation.java class="org.acme.logix.HandlingAgentImpl"/> >> <reference name="logisticCenter" > >> <binding.ws <http://binding.ws> uri=" >> http://127.0.0.1:8087/AfnemerHandlingAgentComponent"/> >> </reference> <reference name="auditService" >> target="AuditServiceComponent"/> </component> >> >> >> >> <component name="AfnemerLogisticCenterComponent"> >> <implementation.java class="org.acme.logix.LogisticCenterImpl"/> >> <reference name="messageInterpreter"> >> <interface.java interface="org.acme.logix.MessageInterpreter" >> callbackInterface="org.acme.logix.MessageInterpreterCallback"/> >> >> <binding.ws <http://binding.ws> uri=" >> http://localhost:8081/MessageInterpreterComponent/MessageInterpreter"/> >> <callback > >> <binding.ws <http://binding.ws> uri=" >> http://localhost:8084/Client/MessageInterpreterCallback < >> http://localhost:8081/Client/MessageInterpreterCallback>" /> >> >> </callback> >> </reference> >> <reference name="auditService"> <binding.jms >> initialContextFactory="org.apache.activemq.jndi.ActiveMQInitialContextFactory" >> jndiURL="tcp://localhost:61616"> >> <destination jndiName="AuditServiceQueue" /> >> </binding.jms> </reference> >> </component> >> <component name="MessageInterpreterComponent"> >> <implementation.java class="org.acme.logix.MessageInterpreterImpl"/> >> <service name="MessageInterpreter"> >> <interface.java interface="org.acme.logix.MessageInterpreter" >> >> callbackInterface="org.acme.logix.MessageInterpreterCallback"/> >> <binding.ws <http://binding.ws> uri=" >> http://localhost:8081/MessageInterpreterComponent/MessageInterpreter"/> >> <callback> >> <binding.ws <http://binding.ws> uri=" >> http://localhost:8084/Client/MessageInterpreterCallback < >> http://localhost:8081/Client/MessageInterpreterCallback>"/> >> >> </callback> >> </service> >> </component> >> >> >> <component name="AuditServiceComponent"> >> <implementation.java class="org.acme.logix.AuditServiceImpl"/> >> <service name="AuditService"> >> <binding.jms >> initialContextFactory="org.apache.activemq.jndi.ActiveMQInitialContextFactory" >> jndiURL="tcp://localhost:61616"> >> <destination jndiName="AuditServiceQueue" /> >> </binding.jms> </service> >> </component> >> </composite> >> >> >
