My java interface: org.apache.tuscany.sca.vtest.wsbinding.AService.
@Remotable
public interface AService {
public String getGreetings(String name);
}
I have the following wsdl, which I assume is doc/lit/unwrapped or bare.
<wsdl:definitions targetNamespace="
http://wsbinding.vtest.sca.tuscany.apache.org"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:ns0="http://wsbinding.vtest.sca.tuscany.apache.org"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:ns1="http://org.apache.axis2/xsd"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<xs:schema attributeFormDefault="qualified"
elementFormDefault="qualified" targetNamespace="
http://wsbinding.vtest.sca.tuscany.apache.org" xmlns:ns="
http://wsbinding.vtest.sca.tuscany.apache.org">
<xs:element minOccurs="0" name="getGreetings" nillable="true"
type="xs:string"/>
<xs:element minOccurs="0" name="getGreetingsResponse"
nillable="true" type="xs:string"/>
</xs:schema>
</wsdl:types>
<wsdl:message name="getGreetingsRequest">
<wsdl:part name="parameters" element="ns0:getGreetings"/>
</wsdl:message>
<wsdl:message name="getGreetingsResponse">
<wsdl:part name="parameters" element="ns0:getGreetingsResponse"/>
</wsdl:message>
<wsdl:portType name="AServicePortType">
<wsdl:operation name="getGreetings">
<wsdl:input message="ns0:getGreetingsRequest"
wsaw:Action="urn:getGreetings"/>
<wsdl:output message="ns0:getGreetingsResponse"
wsaw:Action="urn:getGreetingsResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="AServiceSOAP12Binding" type="ns0:AServicePortType">
<soap12:binding style="document" transport="
http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getGreetings">
<soap12:operation soapAction="urn:getGreetings" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="AServicePortTypeBinding" type="ns0:AServicePortType">
<soap:binding style="document" transport="
http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getGreetings">
<soap:operation soapAction=""/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="AServiceHttpBinding" type="ns0:AServicePortType">
<http:binding verb="POST"/>
<wsdl:operation name="getGreetings">
<http:operation location="AService/getGreetings"/>
<wsdl:input>
<mime:content part="getGreetings" type="text/xml"/>
</wsdl:input>
<wsdl:output>
<mime:content part="getGreetings" type="text/xml"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="AServiceSOAP11Binding" type="ns0:AServicePortType">
<soap:binding style="document" transport="
http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getGreetings">
<soap:operation soapAction="urn:getGreetings" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="AServicePortTypeService">
<wsdl:port name="AServicePortTypePort"
binding="ns0:AServicePortTypeBinding">
<soap:address location="http://localhost:8080/AService"/>
</wsdl:port>
</wsdl:service>
<wsdl:service name="AService">
<wsdl:port name="AServiceHttpport" binding="ns0:AServiceHttpBinding">
<http:address location="http://localhost:8080/AService/httpport"/>
</wsdl:port>
<wsdl:port name="AServiceSOAP12port_http"
binding="ns0:AServiceSOAP12Binding">
<soap12:address location="http://localhost:8080/AService/soap12port"/>
</wsdl:port>
<wsdl:port name="AServiceSOAP11port_http"
binding="ns0:AServiceSOAP11Binding">
<soap:address location="http://localhost:8080/AService/soap11port"/>
</wsdl:port>
<wsdl:port name="AServiceSOAP12port_http_null"
binding="ns0:AServiceSOAP12Binding">
<soap12:address location=""/>
</wsdl:port>
<wsdl:port name="AServiceSOAP12port_http_wsdl"
binding="ns0:AServiceSOAP12Binding">
<soap12:address location="inWsdl"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
The following diff should tell how I got this wsdl:
Index:
D:/T/java/sca/vtest/wsbinding/service/src/main/resources/aservice.wsdl
===================================================================
--- D:/T/java/sca/vtest/wsbinding/service/src/main/resources/aservice.wsdl
(revision 667316)
+++ D:/T/java/sca/vtest/wsbinding/service/src/main/resources/aservice.wsdl
(working copy)
@@ -29,20 +29,8 @@
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<xs:schema attributeFormDefault="qualified"
elementFormDefault="qualified" targetNamespace="
http://wsbinding.vtest.sca.tuscany.apache.org" xmlns:ns="
http://wsbinding.vtest.sca.tuscany.apache.org">
- <xs:element name="getGreetings">
- <xs:complexType>
- <xs:sequence>
- <xs:element minOccurs="0" name="param0" nillable="true"
type="xs:string"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- <xs:element name="getGreetingsResponse">
- <xs:complexType>
- <xs:sequence>
- <xs:element minOccurs="0" name="return" nillable="true"
type="xs:string"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
+ <xs:element minOccurs="0" name="getGreetings" nillable="true"
type="xs:string"/>
+ <xs:element minOccurs="0" name="getGreetingsResponse"
nillable="true" type="xs:string"/>
</xs:schema>
</wsdl:types>
I have tried a few combinations with interface.wsdl and wsdlElement with
binding.ws. Here are the cases that work (here work means, the
clientcomponent is able to invoke the service successfully):
Case-1: interface.wsdl used both with service and reference.
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="
http://vtest" name="mywsdltest">
<component name="AComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AServiceImpl"/>
<service name="AService">
<interface.wsdl interface="
http://wsbinding.vtest.sca.tuscany.apache.org#wsdl.interface(AServicePortType)
"/>
<binding.ws uri="http://localhost:8085/AService/endpointref"/>
</service>
</component>
<component name="AClientComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AClientServiceImpl"/>
<reference name="aService">
<interface.wsdl interface="
http://wsbinding.vtest.sca.tuscany.apache.org#wsdl.interface(AServicePortType)
"/>
<binding.ws uri="http://localhost:8085/AService/endpointref"/>
</reference>
</component>
</composite>
Case-2: interface.java and wsdlElement on service binding.ws AND
interface.wsdl on reference.
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="
http://vtest" name="mywsdltest">
<component name="AComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AServiceImpl"/>
<service name="AService">
<interface.java
interface="org.apache.tuscany.sca.vtest.wsbinding.AService"/>
<binding.ws wsdlElement="
http://wsbinding.vtest.sca.tuscany.apache.org#wsdl.binding(AServiceSOAP11Binding)
"
uri="http://localhost:8085/AService/endpointref"/>
</service>
</component>
<component name="AClientComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AClientServiceImpl"/>
<reference name="aService">
<interface.wsdl interface="
http://wsbinding.vtest.sca.tuscany.apache.org#wsdl.interface(AServicePortType)
"/>
<binding.ws uri="http://localhost:8085/AService/endpointref"/>
</reference>
</component>
</composite>
Case-3: wsdlElement on service binding.ws AND interface.wsdl on reference.
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="
http://vtest" name="mywsdltest">
<component name="AComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AServiceImpl"/>
<service name="AService">
<binding.ws wsdlElement="
http://wsbinding.vtest.sca.tuscany.apache.org#wsdl.binding(AServiceSOAP11Binding)
"
uri="http://localhost:8085/AService/endpointref"/>
</service>
</component>
<component name="AClientComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AClientServiceImpl"/>
<reference name="aService">
<interface.wsdl interface="
http://wsbinding.vtest.sca.tuscany.apache.org#wsdl.interface(AServicePortType)
"/>
<binding.ws uri="http://localhost:8085/AService/endpointref"/>
</reference>
</component>
</composite>
Case-4: wsdlElement in binding.ws in both service and reference.
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="
http://vtest" name="mywsdltest">
<component name="AComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AServiceImpl"/>
<service name="AService">
<binding.ws wsdlElement="
http://wsbinding.vtest.sca.tuscany.apache.org#wsdl.binding(AServiceSOAP11Binding)
"
uri="http://localhost:8085/AService/endpointref"/>
</service>
</component>
<component name="AClientComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AClientServiceImpl"/>
<reference name="aService">
<binding.ws wsdlElement="
http://wsbinding.vtest.sca.tuscany.apache.org#wsdl.binding(AServiceSOAP11Binding)
"
uri="http://localhost:8085/AService/endpointref"/>
</reference>
</component>
</composite>
Here are some cases that do not work:
Case-D1: interface.java on service AND interface.wsdl on reference
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="
http://vtest" name="mywsdltest">
<component name="AComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AServiceImpl"/>
<service name="AService">
<interface.java
interface="org.apache.tuscany.sca.vtest.wsbinding.AService"/>
<binding.ws uri="http://localhost:8085/AService/endpointref"/>
</service>
</component>
<component name="AClientComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AClientServiceImpl"/>
<reference name="aService">
<interface.wsdl interface="
http://wsbinding.vtest.sca.tuscany.apache.org#wsdl.interface(AServicePortType)
"/>
<binding.ws uri="http://localhost:8085/AService/endpointref"/>
</reference>
</component>
</composite>
Case-D2: interface.wsdl on service AND interface.java on reference
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="
http://vtest" name="mywsdltest">
<component name="AComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AServiceImpl"/>
<service name="AService">
<interface.wsdl interface="
http://wsbinding.vtest.sca.tuscany.apache.org#wsdl.interface(AServicePortType)
"/>
<binding.ws uri="http://localhost:8085/AService/endpointref"/>
</service>
</component>
<component name="AClientComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AClientServiceImpl"/>
<reference name="aService">
<interface.java
interface="org.apache.tuscany.sca.vtest.wsbinding.AService"/>
<binding.ws uri="http://localhost:8085/AService/endpointref"/>
</reference>
</component>
</composite>
Case-D3: interface.java and wsdlElement in service binding.ws AND
interface.java on reference.
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="
http://vtest" name="mywsdltest">
<component name="AComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AServiceImpl"/>
<service name="AService">
<interface.java
interface="org.apache.tuscany.sca.vtest.wsbinding.AService"/>
<binding.ws wsdlElement="
http://wsbinding.vtest.sca.tuscany.apache.org#wsdl.binding(AServiceSOAP11Binding)
"
uri="http://localhost:8085/AService/endpointref"/>
</service>
</component>
<component name="AClientComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AClientServiceImpl"/>
<reference name="aService">
<interface.java
interface="org.apache.tuscany.sca.vtest.wsbinding.AService"/>
<binding.ws uri="http://localhost:8085/AService/endpointref"/>
</reference>
</component>
</composite>
Case-D4: interface.java on service AND interface.java and wsdlElement on
reference binding.ws
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="
http://vtest" name="mywsdltest">
<component name="AComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AServiceImpl"/>
<service name="AService">
<interface.java
interface="org.apache.tuscany.sca.vtest.wsbinding.AService"/>
<binding.ws uri="http://localhost:8085/AService/endpointref"/>
</service>
</component>
<component name="AClientComponent">
<implementation.java
class="org.apache.tuscany.sca.vtest.wsbinding.impl.AClientServiceImpl"/>
<reference name="aService">
<interface.java
interface="org.apache.tuscany.sca.vtest.wsbinding.AService"/>
<binding.ws wsdlElement="
http://wsbinding.vtest.sca.tuscany.apache.org#wsdl.binding(AServiceSOAP11Binding)
"
uri="http://localhost:8085/AService/endpointref"/>
</reference>
</component>
</composite>
There may be a few other combinations that may work or not work. But this
itself got me thoroughly confused. Can someone help me understand what is
happening here?
++Vamsi