Hi,It's not clear from the SCA spec how generics impacts the interface mapping. We need some clarifications there.
The JAXWS 2.1 spec uses the erased type and only honor the type argument in Collection. At this moment, Tuscany supports the following case:
@Remotable
public interface MyHelloService extends HelloService<String> {
}
And use MyHelloService as the service interface for HelloServiceImpl.
I don't think it's wise to try to cover other variations before we get it
clarified by the spec.
Thanks, Raymond -------------------------------------------------- From: "Vamsavardhana Reddy" <[EMAIL PROTECTED]> Sent: Friday, May 23, 2008 10:42 AM To: <[email protected]>Subject: TransformationException when using java interface definition with generics
Can someone point to me what I am doing wrong or if it is a problem in Tuscany? Details follow... I have the following service interface: @Remotable public interface HelloService<E> { public E getGreetings(E name); } -------- The following is the service implementation: @Service(HelloService.class) public class HelloServiceImpl implements HelloService<String> { public String getGreetings(String name) { return "Hello "+name; } } -------- The following is the client interface that invokes the service: public interface HelloServiceClient<E> { E getGreetingsForward(E name); } -------- The following is the client implementation: @Service(HelloServiceClient.class)public class HelloServiceClientImpl implements HelloServiceClient<String> {private HelloService<String> service; @Reference public void setHelloService(HelloService<String> service) { this.service = service; } public String getGreetingsForward(String name) { return service.getGreetings(name); } } --------I have a HelloService component and two HelloServiceClient components in mycomposite (given below): <composite xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:wsdli="http://www.w3.org/2006/01/wsdl-instance" name="HelloService"> <!-- Clients to test the service --> <component name="HelloServiceClientWSComponent"> <implementation.java class="org.apache.tuscany.sca.itest.impl.HelloServiceClientImpl" /> <reference name="helloService"> <interface.java interface="org.apache.tuscany.sca.itest.HelloService"/> <binding.ws uri="http://localhost:8080/hs-ep1"/> </reference> </component> <component name="HelloServiceClientSCAComponent"> <implementation.java class="org.apache.tuscany.sca.itest.impl.HelloServiceClientImpl" /> <reference name="helloService" target="HelloServiceComponent"> <binding.sca/> </reference> </component> <!-- Components used to implement the services --> <component name="HelloServiceComponent"> <implementation.java class="org.apache.tuscany.sca.itest.impl.HelloServiceImpl"/> <service name="HelloService"> <interface.java interface="org.apache.tuscany.sca.itest.HelloService"/> <binding.ws uri="http://localhost:8080/hs-ep1"/> <binding.sca/> </service> </component> </composite> -------- The following is the code I am using to invoke the service via client components: domain = SCADomain.newInstance("hello.composite"); String name = "Me <String> SCA"; HelloServiceClient<String> helloServiceClient = domain.getService(HelloServiceClient.class, "HelloServiceClientSCAComponent"); String resp = helloServiceClient.getGreetingsForward(name); System.out.println(resp); name = "Me <String> WS"; helloServiceClient = domain.getService(HelloServiceClient.class, "HelloServiceClientWSComponent"); resp = helloServiceClient.getGreetingsForward(name); System.out.println(resp); --------It works fine when I invoke the service using the client component that uses SCA binding to connect to the service. I get the following exception when Iuse the client component that uses WS binding. May 23, 2008 11:04:50 PM org.apache.tuscany.sca.binding.ws.axis2.Axis2ServiceInOutSyncMessageReceiver invokeBusinessLogicSEVERE: org.apache.tuscany.sca.databinding.TransformationException: No pathfound for the transformation: org.apache.axiom.om.OMElement->null org.osoa.sca.ServiceRuntimeException: org.apache.tuscany.sca.databinding.TransformationException: No path found for the transformation: org.apache.axiom.om.OMElement->null at org.apache.tuscany.sca.core.invocation.RuntimeWireInvoker.invoke(RuntimeWireInvoker.java:119) at org.apache.tuscany.sca.core.invocation.RuntimeWireInvoker.invoke(RuntimeWireInvoker.java:85) at org.apache.tuscany.sca.core.invocation.RuntimeWireInvoker.invoke(RuntimeWireInvoker.java:79) at org.apache.tuscany.sca.core.assembly.RuntimeWireImpl.invoke(RuntimeWireImpl.java:138) at org.apache.tuscany.sca.binding.ws.axis2.Axis2ServiceProvider.invokeTarget(Axis2ServiceProvider.java:669) at org.apache.tuscany.sca.binding.ws.axis2.Axis2ServiceInOutSyncMessageReceiver.invokeBusinessLogic(Axis2ServiceInOutSyncMessageReceiver.java:68) at org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.invokeBusinessLogic(AbstractInOutSyncMessageReceiver.java:42) at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:96) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:145) at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275) at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:120) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) at org.apache.tuscany.sca.core.work.Jsr237Work.run(Jsr237Work.java:63) at org.apache.tuscany.sca.core.work.ThreadPoolWorkManager$DecoratingWork.run(ThreadPoolWorkManager.java:221) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675) at java.lang.Thread.run(Thread.java:595) Caused by: org.apache.tuscany.sca.databinding.TransformationException: No path found for the transformation: org.apache.axiom.om.OMElement->null at org.apache.tuscany.sca.databinding.impl.MediatorImpl.getTransformerChain(MediatorImpl.java:162) at org.apache.tuscany.sca.databinding.impl.MediatorImpl.mediate(MediatorImpl.java:67) at org.apache.tuscany.sca.core.databinding.transformers.Input2InputTransformer.transform(Input2InputTransformer.java:181) at org.apache.tuscany.sca.core.databinding.transformers.Input2InputTransformer.transform(Input2InputTransformer.java:45) at org.apache.tuscany.sca.databinding.impl.MediatorImpl.mediate(MediatorImpl.java:79) at org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.transform(DataTransformationInterceptor.java:186) at org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:76) at org.apache.tuscany.sca.core.invocation.RuntimeWireInvoker.invoke(RuntimeWireInvoker.java:110) ... 29 more
