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

Reply via email to