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>