Rohan Sahgal wrote:
Hi all,
I had used the combination of helloworld-ws-service and
helloworld-ws-reference samples in Tuscany 1.2.
I used them as a building block to my own application.
At the time, the following worked:-
- Take the wsdl generated by helloworld-ws-service
- Replace the helloworld.wsdl in helloworld-ws-reference sample with
this new one.
- Update the wsdl service name and wsdl port name in the composite of
helloworld-ws-reference sample to reflect the new name's
Now this worked end-to-end.
However now with Tuscany 1.3.2 first of all the wsdl looks different
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="HelloWorldServiceComponent.HelloWorldService"
targetNamespace="http://helloworld/HelloWorldServiceComponent/HelloWorldService"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://helloworld/HelloWorldServiceComponent/HelloWorldService"
xmlns:ns0="http://helloworld"
xmlns:SOAP11="http://schemas.xmlsoap.org/wsdl/soap/">
<wsdl:import namespace="http://helloworld"
location="/HelloWorldService?wsdl=wsdl/helloworld.wsdl">
</wsdl:import>
<wsdl:binding name="HelloWorldBinding" type="ns0:HelloWorld">
<SOAP11:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getGreetings">
<SOAP11:operation soapAction="urn:getGreetings"/>
<wsdl:input name="getGreetingsRequest">
<SOAP11:body use="literal"/>
</wsdl:input>
<wsdl:output name="getGreetingsResponse">
<SOAP11:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="HelloWorldService">
<wsdl:port name="HelloWorldPort" binding="tns:HelloWorldBinding">
<SOAP11:address location="http://128.107.103.204:8085/HelloWorldService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Now when I updated the reference sample with this wsdl and changed the
corresponding line's in its composite file with
<reference name="HelloWorldService"
promote="HelloWorldServiceComponent/helloWorldService">
<interface.java interface="helloworld.HelloWorldService" />
<binding.ws
wsdlElement="http://helloworld#wsdl.port(HelloWorldService/HelloWorldSoapPort)"/>
</reference>
I get the following error,
run:
[java] Injected helloWorldService
[java] Called getGreetings
[java] Exception in thread "main"
org.osoa.sca.ServiceRuntimeException: org.apache.axis2.AxisFault: The
system cannot infer the transport information from the / URL.
[java] at
org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:136)
[java] at
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:287)
[java] at
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:154)
[java] at $Proxy4.getGreetings(Unknown Source)
[java] at
helloworld.HelloWorldServiceComponent.getGreetings(HelloWorldServiceComponent.java:30)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[java] at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[java] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[java] at java.lang.reflect.Method.invoke(Method.java:597)
[java] at
org.apache.tuscany.sca.implementation.java.invocation.JavaImplementationInvoker.invoke(JavaImplementationInvoker.java:132)
[java] at
org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke(PassByValueInterceptor.java:112)
[java] at
org.apache.tuscany.sca.binding.sca.impl.SCABindingInvoker.invoke(SCABindingInvoker.java:61)
[java] at
org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke(PassByValueInterceptor.java:112)
[java] at
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:287)
[java] at
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:154)
[java] at $Proxy4.getGreetings(Unknown Source)
[java] at helloworld.HelloWorldClient.main(HelloWorldClient.java:33)
[java] Caused by: org.apache.axis2.AxisFault: The system cannot
infer the transport information from the / URL.
[java] at
org.apache.axis2.description.ClientUtils.inferOutTransport(ClientUtils.java:73)
[java] at
org.apache.axis2.client.OperationClient.prepareMessageContext(OperationClient.java:302)
[java] at
org.apache.axis2.description.OutInAxisOperationClient.execute
Impl(OutInAxisOperation.java:174)
[java] at
org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
[java] at
org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker$1.run(Axis2BindingInvoker.java:128)
[java] at java.security.AccessController.doPrivileged(Native Method)
[java] at
org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invokeTarget(Axis2BindingInvoker.java:126)
[java] at
org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invoke(Axis2BindingInvoker.java:94)
[java] at
org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:78)
[java] ... 16 more
[java] Java Result: 1
This is the exact error I am getting in my application.
Has something changed, or am I missing something.
Thanks,
Rohan
Hi Rohan,
It looks like the <binding.ws> element in the reference sample's composite
file is wrong. You are using
<binding.ws
wsdlElement="http://helloworld#wsdl.port(HelloWorldService/HelloWorldSoapPort)"/>
It looks like there are two problems with this:
1. The port name is "HelloWorldSoapPort" and it should be "HelloWorldPort"
to match the WSDL.
2. The namespace is "http://helloworld" and it should be
"http://helloworld/HelloWorldServiceComponent/HelloWorldService"
to match the WSDL.
Can you change the <binding.ws> element to
<binding.ws
wsdlElement="http://helloworld/HelloWorldServiceComponent/HelloWorldService#wsdl.port(HelloWorldService/HelloWorldPort)"/>
and see if this fixes the problem?
Simon