We are receiving an error that we do not quite understand while trying
to generate a Java client from a multi-operation WSDL file.

The error message is:
[java] WSDLToJava Error : Non unique body parts! In a port, operations
must have unique operation signaure on the wire for successful dispatch.
In port {http://www.example.org/wsdl14/}wsdl14SOAP, Operations
"{http://www.example.org/wsdl14/}Operation35"; and
"{http://www.example.org/wsdl14/}Operation36"; have the same request body
block {http://www.example.org/wsdl14/}Operation35


The WSDL below is valid, and we can generate Java code from it using
"Apache CXF (incubator) 2.1-incubator-SNAPSHOT".
The WSDL contains two operations (Operation35,Operation36), which have
input and output messages in the signature.
As long as these input/output parameter messages are unique (by name),
everything is fine.
The "non unique body parts" error occurs if we try to say that both
operations use the same messages as input and output.
(See location marked "s/36/35/" below)
The same thing happens if we try to say that the two request messages
contain the same element (See location marked "s/73/71/" below).

Note that all the elements defined in this schema (Element71..Element74)
have identical structure, so we could use only one such element if it
were not for the requirement to have unique names.

Why does this error occur? In most programming languages, a method is
uniquely defined by its signature (name+parameters), so the parameters
can be the same as long as the method name is different.

Is this requirement for uniqueness contained in the WSDL (or SOAP)
specification, or was it introduced by the CXF implementation?
How can we get around this, i.e. how can we have one port with two
operations which take the same structures for input?
Operation1(Type1 input, Type2 output)
Operation2(Type1 input, Type2 output)


<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:tns="http://www.example.org/wsdl13/";
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; name="wsdl13"
targetNamespace="http://www.example.org/wsdl13/";>
  <wsdl:types>
    <xsd:schema targetNamespace="http://www.example.org/wsdl13/";>
      <xsd:element name="Element71">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="one" type="xsd:string"/>
            <xsd:element name="two" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="Element72">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="one" type="xsd:string"/>
            <xsd:element name="two" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="Element73">
        <xsd:complexType>
                <xsd:sequence>
            <xsd:element name="one" type="xsd:string"/>
            <xsd:element name="two" type="xsd:string"/>
                </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="Element74">
        <xsd:complexType>
                <xsd:sequence>
            <xsd:element name="one" type="xsd:string"/>
            <xsd:element name="two" type="xsd:string"/>
                </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="Operation35Request">
    <wsdl:part name="parameters" element="tns:Element71"/>
  </wsdl:message>
  <wsdl:message name="Operation35Response">
    <wsdl:part name="parameters" element="tns:Element72"/>
  </wsdl:message>
  <wsdl:message name="Operation36Request">
        <wsdl:part name="parameters"
element="tns:Element73"></wsdl:part> <!-- s/73/71/ -->
  </wsdl:message>
  <wsdl:message name="Operation36Response">
        <wsdl:part name="parameters"
element="tns:Element74"></wsdl:part> <!-- s/74/72/ -->
  </wsdl:message>
  <wsdl:portType name="wsdl13">
    <wsdl:operation name="Operation35">
      <wsdl:input message="tns:Operation35Request"/>
      <wsdl:output message="tns:Operation35Response"/>
    </wsdl:operation>
    <wsdl:operation name="Operation36">
        <wsdl:input message="tns:Operation36Request"></wsdl:input> <!--
s/36/35/ -->
        <wsdl:output message="tns:Operation36Response"></wsdl:output>
<!-- s/36/35/ -->
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="wsdl13SOAP" type="tns:wsdl13">
    <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="Operation35">
      <soap:operation
soapAction="http://www.example.org/wsdl13/Operation35"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="Operation36">
      <soap:operation
soapAction="http://www.example.org/wsdl13/Operation36"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="wsdl13">
    <wsdl:port binding="tns:wsdl13SOAP" name="wsdl13SOAP">
      <soap:address location="http://www.example.org/"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>



[java] WSDLToJava Error : Non unique body parts! In a port, operations
must have unique operation signaure on the wire for successful dispatch.
In port {http://www.example.org/wsdl14/}wsdl14SOAP, Operations
"{http://www.example.org/wsdl14/}Operation35"; and
"{http://www.example.org/wsdl14/}Operation36"; have the same request body
block {http://www.example.org/wsdl14/}Operation35  

 
 
Radu Manolescu
Morgan Stanley | Technology
2000 Westchester Ave, 1st Floor | Purchase, NY  10577
Phone: +1 914 225-5871
Mobile: +1 203 648-6964
[EMAIL PROTECTED]
--------------------------------------------------------

NOTICE: If received in error, please destroy and notify sender. Sender does not 
intend to waive confidentiality or privilege. Use of this email is prohibited 
when received in error.

Reply via email to