I have wrapped style document literal WSDL which I have built so as to be 
compatible with Axis 1.1, soap::lite, zsi python soap, and MSStudio .net.  The 
trouble arose with Axis 1.2 and continues with 1.3:

I have a method in my interface which takes an unbounded sequence of unbounded 
sequences of complex-types.  The item is suppose to represent a collection of 
records, where a record is a collection of name/value string pairs.

Here is the WSDL, followed by sample XML captured from an invocation of the 
problem method findAddressMulti:

Note that with 1.2 and 1.3, the element name of the nameValue items in the 
first record is different from the name used for the nameValue items in 
subsequent elements in the sequence.....

can anyone comment as to whether there is something illegal about the WSDL?  It 
seems like it surely must be a bug to name the elements in a sequence 
differently.  I'm hoping that this is fixed in axis, but would be happy for a 
suggested edit for my WSDL that didn't break any of the interopability with 
other clients.

Dave

wsdl cuthere*-
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; 
xmlns:tns="http://ezlocate.na.teleatlas.com/Geocoding.wsdl"; 
xmlns:tns1="http://ezlocate.na.teleatlas.com/Geocoding.xsd1"; 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xsd1="http://ezlocate.na.teleatlas.com/Geocoding.xsd1"; 
targetNamespace="http://ezlocate.na.teleatlas.com/Geocoding.wsdl"; 
name="Geocoding">
        <wsdl:types>
                <schema 
targetNamespace="http://ezlocate.na.teleatlas.com/Geocoding.xsd1"; 
xmlns="http://www.w3.org/2001/XMLSchema";>
                        <import 
namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
                        <complexType name="NameValue">
                                <sequence>
                                        <element name="name" nillable="true" 
type="xsd:string"/>
                                        <element name="value" nillable="true" 
type="xsd:string"/>
                                </sequence>
                        </complexType>
                        <complexType name="Record">
                                <sequence>
                                        <element maxOccurs="unbounded" 
name="nv" nillable="true" type="tns1:NameValue"/>
                                </sequence>
                        </complexType>
                        <complexType name="Geocode">
                                <sequence>
                                        <element name="resultCode" 
type="xsd:int"/>
                                        <element name="mAttributes" 
nillable="true" type="tns1:Record"/>
                                </sequence>
                        </complexType>
                        <complexType name="MatchType">
                                <sequence>
                                        <element name="name" nillable="true" 
type="xsd:string"/>
                                        <element name="description" 
nillable="true" type="xsd:string"/>
                                        <element name="id" type="xsd:int"/>
                                </sequence>
                        </complexType>
                        <complexType name="MatchTypeSequence">
                                <sequence>
                                        <element maxOccurs="unbounded" 
name="types" nillable="true" type="tns1:MatchType"/>
                                </sequence>
                        </complexType>
                        <complexType name="RecordSequence">
                                <sequence>
                                        <element maxOccurs="unbounded" 
name="record" nillable="true" type="tns1:Record"/>
                                </sequence>
                        </complexType>
                        <complexType name="GeocodeSequence">
                                <sequence>
                                        <element maxOccurs="unbounded" 
name="sequence" nillable="true" type="tns1:Geocode"/>
                                </sequence>
                        </complexType>
                        <complexType name="OutputField">
                                <sequence>
                                        <element name="name" nillable="true" 
type="xsd:string"/>
                                        <element name="description" 
nillable="true" type="xsd:string"/>
                                        <element name="type" type="xsd:int"/>
                                </sequence>
                        </complexType>
                        <complexType name="OutputFieldSequence">
                                <sequence>
                                        <element maxOccurs="unbounded" 
name="fields" nillable="true" type="tns1:OutputField"/>
                                </sequence>
                        </complexType>
                        <xsd:element name="getServices">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element maxOccurs="1" 
minOccurs="1" name="identity" type="xsd:int"/>
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="getServicesResponse">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element maxOccurs="1" 
minOccurs="1" name="resultCode" type="xsd:int"/>
                                                <xsd:element maxOccurs="1" 
minOccurs="0" name="services" type="xsd1:Record"/>
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="getServiceDescription">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element maxOccurs="1" 
minOccurs="1" name="service" type="xsd:string"/>
                                                <xsd:element maxOccurs="1" 
minOccurs="1" name="identity" type="xsd:int"/>
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="getServiceDescriptionResponse">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element maxOccurs="1" 
minOccurs="1" name="resultCode" type="xsd:int"/>
                                                <xsd:element maxOccurs="1" 
minOccurs="0" name="description" type="xsd:string"/>
                                                <xsd:element maxOccurs="1" 
minOccurs="0" name="countryCode" type="xsd:string"/>
                                                <xsd:element maxOccurs="1" 
minOccurs="0" name="inputs" type="xsd1:Record"/>
                                                <xsd:element maxOccurs="1" 
minOccurs="0" name="outputs" type="tns1:OutputFieldSequence"/>
                                                <xsd:element maxOccurs="1" 
minOccurs="0" name="matchTypes" type="xsd1:MatchTypeSequence"/>
                                                <xsd:element maxOccurs="1" 
minOccurs="0" name="matchTypeName" type="xsd:string"/>
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="findAddress">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element maxOccurs="1" 
minOccurs="1" name="service" type="xsd:string"/>
                                                <xsd:element maxOccurs="1" 
minOccurs="1" name="input" type="xsd1:Record"/>
                                                <xsd:element maxOccurs="1" 
minOccurs="1" name="identity" type="xsd:int"/>
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="findAddressResponse">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element maxOccurs="1" 
minOccurs="1" name="resultCode" type="xsd:int"/>
                                                <xsd:element maxOccurs="1" 
minOccurs="0" name="result" type="xsd1:Geocode"/>
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="findMultiAddressResponse">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element maxOccurs="1" 
minOccurs="1" name="resultCode" type="xsd:int"/>
                                                <xsd:element maxOccurs="1" 
minOccurs="0" name="results" type="xsd1:GeocodeSequence"/>
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="findMultiAddress">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element maxOccurs="1" 
minOccurs="1" name="service" type="xsd:string"/>
                                                <xsd:element maxOccurs="1" 
minOccurs="1" name="inputs" type="xsd1:RecordSequence"/>
                                                <xsd:element maxOccurs="1" 
minOccurs="1" name="identity" type="xsd:int"/>
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                </schema>
        </wsdl:types>
        <wsdl:message name="getServicesRequest">
                <wsdl:part name="parameters" element="xsd1:getServices"/>
        </wsdl:message>
        <wsdl:message name="getServicesResponse">
                <wsdl:part name="parameters" 
element="xsd1:getServicesResponse"/>
        </wsdl:message>
        <wsdl:message name="getServiceDescriptionRequest">
                <wsdl:part name="parameters" 
element="xsd1:getServiceDescription"/>
        </wsdl:message>
        <wsdl:message name="getServiceDescriptionResponse">
                <wsdl:part name="parameters" 
element="xsd1:getServiceDescriptionResponse"/>
        </wsdl:message>
        <wsdl:message name="findAddressRequest">
                <wsdl:part name="parameters" element="xsd1:findAddress"/>
        </wsdl:message>
        <wsdl:message name="findAddressResponse">
                <wsdl:part name="parameters" 
element="xsd1:findAddressResponse"/>
        </wsdl:message>
        <wsdl:message name="findMultiAddressRequest">
                <wsdl:part name="parameters" element="xsd1:findMultiAddress"/>
        </wsdl:message>
        <wsdl:message name="findMultiAddressResponse">
                <wsdl:part name="parameters" 
element="xsd1:findMultiAddressResponse"/>
        </wsdl:message>
        <wsdl:portType name="GeocodingPortType">
                <wsdl:operation name="getServices">
                        <wsdl:input message="tns:getServicesRequest"/>
                        <wsdl:output message="tns:getServicesResponse"/>
                </wsdl:operation>
                <wsdl:operation name="getServiceDescription">
                        <wsdl:input message="tns:getServiceDescriptionRequest"/>
                        <wsdl:output 
message="tns:getServiceDescriptionResponse"/>
                </wsdl:operation>
                <wsdl:operation name="findAddress">
                        <wsdl:input message="tns:findAddressRequest"/>
                        <wsdl:output message="tns:findAddressResponse"/>
                </wsdl:operation>
                <wsdl:operation name="findMultiAddress">
                        <wsdl:input message="tns:findMultiAddressRequest"/>
                        <wsdl:output message="tns:findMultiAddressResponse"/>
                </wsdl:operation>
        </wsdl:portType>
        <wsdl:binding name="GeocodingBinding" type="tns:GeocodingPortType">
                <soap:binding style="document" 
transport="http://schemas.xmlsoap.org/soap/http"/>
                <wsdl:operation name="getServices">
                        <soap:operation 
soapAction="Geocoding:GeocodingPortType#getServices"/>
                        <wsdl:input>
                                <soap:body use="literal"/>
                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal"/>
                        </wsdl:output>
                </wsdl:operation>
                <wsdl:operation name="getServiceDescription">
                        <soap:operation 
soapAction="Geocoding:GeocodingPortType#getServiceDescription"/>
                        <wsdl:input>
                                <soap:body use="literal"/>
                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal"/>
                        </wsdl:output>
                </wsdl:operation>
                <wsdl:operation name="findAddress">
                        <soap:operation 
soapAction="Geocoding:GeocodingPortType#findAddress"/>
                        <wsdl:input>
                                <soap:body use="literal"/>
                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal"/>
                        </wsdl:output>
                </wsdl:operation>
                <wsdl:operation name="findMultiAddress">
                        <soap:operation 
soapAction="Geocoding:GeocodingPortType#findMultiAddress"/>
                        <wsdl:input>
                                <soap:body use="literal"/>
                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal"/>
                        </wsdl:output>
                </wsdl:operation>
        </wsdl:binding>
        <wsdl:service name="Geocoding">
                <wsdl:port name="Geocoding" binding="tns:GeocodingBinding">
                        <soap:address 
location="http://ezlocate.na.teleatlas.com/axis/services/Geocoding"/>
                </wsdl:port>
        </wsdl:service>
</wsdl:definitions>
*-endcut

with Axis 1.1, a call with 2 addresses would go onto the wire like this (note 
the nice <nv> </nv>):

<?xml version="1.0" encoding="UTF-8"?>
   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
      <soapenv:Body>
         <findMultiAddress 
xmlns="http://ezlocate.na.teleatlas.com/Geocoding.xsd1";>
            <service xmlns="">Matchmaker standard</service>
            <inputs xmlns="">
               <record>
                  <nv>
                     <name>ADDRESS</name>
                     <value>13  CALLE ANTONIO ALCAZAR</value>
                  </nv>
                  <nv>
                     <name>CITY</name>
                     <value>FLORIDA</value>
                  </nv>
                  <nv>
                     <name>STATE</name>
                     <value>PR</value>
                  </nv>
                  <nv>
                     <name>ZIPCODE</name>
                     <value>00650</value>
                  </nv>
               </record>
               <record>
                  <nv>
                     <name>ADDRESS</name>
                     <value>1  CALLE BAHAMAS</value>
                  </nv>
                  <nv>
                     <name>CITY</name>
                     <value>ISABELA</value>
                  </nv>
                  <nv>
                     <name>STATE</name>
                     <value>PR</value>
                  </nv>
                  <nv>
                     <name>ZIPCODE</name>
                     <value>00662</value>
                  </nv>
               </record>
               <record>
                  <nv>
                     <name>ADDRESS</name>
                     <value>13  CERRO QUINONES</value>
                  </nv>
                  <nv>
                     <name>CITY</name>
                     <value>MANATI</value>
                  </nv>
                  <nv>
                     <name>STATE</name>
                     <value>PR</value>
                  </nv>
                  <nv>
                     <name>ZIPCODE</name>
                     <value>00674</value>
                  </nv>
               </record>
            </inputs>
            <identity xmlns="">-1301945096</identity>
         </findMultiAddress>
      </soapenv:Body>
   </soapenv:Envelope>


With 1.2 and 1.3 off the shelf, the following occurs:

<?xml version="1.0" encoding="UTF-8"?>
   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
      <soapenv:Body>
         <findMultiAddress 
xmlns="http://ezlocate.na.teleatlas.com/Geocoding.xsd1";>
            <service xmlns="">Matchmaker USA</service>
            <inputs xmlns="">
               <record>
                  <record>
                     <name>Addr</name>
                     <value>23 kingsford rd</value>
                  </record>
                  <record>
                     <name>City</name>
                     <value>hanover</value>
                  </record>
                  <record>
                     <name>State</name>
                     <value>NH</value>
                  </record>
                  <record>
                     <name>Zip</name>
                     <value>03755</value>
                  </record>
                  <record>
                     <name>Plus4</name>
                     <value></value>
                  </record>
               </record>
               <record>
                  <nv>
                     <name>Addr</name>
                     <value>23 kingsford rd</value>
                  </nv>
                  <nv>
                     <name>City</name>
                     <value>hanover</value>
                  </nv>
                  <nv>
                     <name>State</name>
                     <value>NH</value>
                  </nv>
                  <nv>
                     <name>Zip</name>
                     <value>03755</value>
                  </nv>
                  <nv>
                     <name>Plus4</name>
                     <value></value>
                  </nv>
               </record>
            </inputs>
            <identity xmlns="">301769842</identity>
         </findMultiAddress>
      </soapenv:Body>
   </soapenv:Envelope>

Reply via email to