Hi,

I have noticed that array parameters (in or out) seem to be serialized
incorrectly in Axis 1.3. I am attaching a sample WSDL here, along with
the corresponding input and output. In summary, instead of creating an
element for the array parameter (containing the array members) it
creates one element for each member, without any all-enclosing parent. 

Note that we are using WSDL2Java to generate the service implementation
from existing wsdl.

WSDL snippet (complete wsdl attached):

  <wsdl:message name="DemoResponse">
    <wsdl:part name="Foos" type="impl:ArrayOfFoos" />
    <wsdl:part name="Bars" type="impl:ArrayOfBars" />
    <wsdl:part name="SomeNumber" type="impl:positiveFloat" />
  </wsdl:message>

Serialized output (simplified slightly - complete output attached):

  <GetDemoResponse>
    <Foos xsi:type="ns1:Foo">
      <MyPayload>hello</MyPayload>
    </Foos>
    <Bars xsi:type="ns2:Bar">
      <MyPayload>good</MyPayload>
    </Bars>
    <Bars xsi:type="ns3:Bar">
      <MyPayload>bye</MyPayload>
    </Bars>
    <SomeNumber xsi:type="ns4:positiveFloat">11.7</SomeNumber>
  </GetDemoResponse>

In Axis 1.1 this worked as expected. Is there anyway to get this to
serialize as:

  <GetDemoResponse>
    <Foos xsi:type="ns1:ArrayOfFoos" soapenc:arrayType="ns1:Foo[1]" >
      <Foo xsi:type="ns1:Foo">
        <MyPayload>hello</MyPayload>
      </Foo>
    </Foos>
    <Bars xsi:type="ns1:ArrayOfBars" soapenc:arrayType="ns1:Bar[2]" >
      <Bar xsi:type="ns2:Bar">
        <MyPayload>good</MyPayload>
      </Bar>
      <Bar xsi:type="ns3:Bar">
        <MyPayload>bye</MyPayload>
      </Bar>
    </Bars>
    <SomeNumber xsi:type="ns4:positiveFloat">11.7</SomeNumber>
  </GetDemoResponse>

Thanks for your help in advance.

-Erik
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
  targetNamespace="http://demo.radialpoint.com/service";
  xmlns="http://schemas.xmlsoap.org/wsdl/";
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
  xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/";
  xmlns:xsd="http://www.w3.org/2001/XMLSchema";
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
  xmlns:impl="http://demo.radialpoint.com/service";
  xmlns:type="http://demo.radialpoint.com/type";>
  <wsdl:types>
    <schema
      targetNamespace="http://demo.radialpoint.com/type";
      xmlns="http://www.w3.org/2001/XMLSchema";>
      
      <complexType name="Foo">
          <sequence>
            <element name="MyPayload" type="xsd:string"/>
          </sequence>
      </complexType>
      
      <complexType name="Bar">
          <sequence>
            <element name="MyPayload" type="xsd:string"/>
          </sequence>
      </complexType>
      
      <complexType name="Blah">
          <sequence>
            <element name="MyPayload" type="xsd:string"/>
          </sequence>
      </complexType>
      
      <complexType name="Boing">
          <sequence>
            <element name="MyPayload" type="xsd:string"/>
          </sequence>
      </complexType>
    </schema>

    <schema
      targetNamespace="http://demo.radialpoint.com/service";
      xmlns="http://www.w3.org/2001/XMLSchema";>
      <import namespace="http://demo.radialpoint.com/type"/>

      <complexType name="ArrayOfFoos">
        <complexContent>
          <restriction base="soapenc:Array">
            <sequence>
              <element name="Foo"
                type="type:Foo" minOccurs="0"
                maxOccurs="unbounded" />
            </sequence>
            <attribute ref="soapenc:arrayType"
              wsdl:arrayType="type:Foo[]" />
          </restriction>
        </complexContent>
      </complexType>

      <complexType name="ArrayOfBars">
        <complexContent>
          <restriction base="soapenc:Array">
            <sequence>
              <element name="Bar"
                type="type:Bar" minOccurs="0"
                maxOccurs="unbounded" />
            </sequence>
            <attribute ref="soapenc:arrayType"
              wsdl:arrayType="type:Bar[]" />
          </restriction>
        </complexContent>
      </complexType>

      <complexType name="ArrayOfBlahs">
        <complexContent>
          <restriction base="soapenc:Array">
            <sequence>
              <element name="Blah"
                type="type:Blah" minOccurs="0"
                maxOccurs="unbounded" />
            </sequence>
            <attribute ref="soapenc:arrayType"
              wsdl:arrayType="type:Blah[]" />
          </restriction>
        </complexContent>
      </complexType>

      <complexType name="CustomException">
        <sequence>
        </sequence>
      </complexType>

      <simpleType name='positiveFloat'>
        <restriction base='float'>
          <minInclusive value='0.0' />
        </restriction>
      </simpleType>

    </schema>
  </wsdl:types>
  
  <wsdl:message name="CustomException">
    <wsdl:part name="CustomException" type="impl:CustomException"/>
  </wsdl:message>

  <wsdl:message name="DemoRequest">
    <wsdl:part name="Boing" type="type:Boing" />
    <wsdl:part name="Blahs" type="impl:ArrayOfBlahs" />
  </wsdl:message>

  <wsdl:message name="DemoResponse">
    <wsdl:part name="Foos" type="impl:ArrayOfFoos" />
    <wsdl:part name="Bars" type="impl:ArrayOfBars" />
    <wsdl:part name="SomeNumber" type="impl:positiveFloat" />
  </wsdl:message>

  <wsdl:portType name="DemoService">
    <wsdl:operation name="GetDemo"
      parameterOrder="Boing Blahs">
      <wsdl:input message="impl:DemoRequest"
        name="DemoRequest" />
      <wsdl:output message="impl:DemoResponse"
        name="DemoResponse" />
      <wsdl:fault  message="impl:CustomException"
        name="CustomException" />
    </wsdl:operation>
  </wsdl:portType>

  <wsdl:binding name="DemoServiceSoapBinding"
    type="impl:DemoService">
    <wsdlsoap:binding style="rpc"
      transport="http://schemas.xmlsoap.org/soap/http"; />
    <wsdl:operation name="GetDemo">
      <wsdlsoap:operation soapAction="" />
      <wsdl:input name="DemoRequest">
        <wsdlsoap:body
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
          namespace="http://demo.radialpoint.com/service";
          use="literal" />
      </wsdl:input>
      <wsdl:output name="DemoResponse">
        <wsdlsoap:body
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
          namespace="http://demo.radialpoint.com/service";
          use="literal" />
      </wsdl:output>
      <wsdl:fault name="CustomException">
        <wsdlsoap:fault
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
          namespace="http://demo.radialpoint.com/service";
          use="literal"/>
      </wsdl:fault>
    </wsdl:operation>
  </wsdl:binding>

  <wsdl:service name="DemoService">
    <wsdl:port binding="impl:DemoServiceSoapBinding"
      name="demo-service/1.0">
      <wsdlsoap:address
        location="http://localhost:7001/demo-service/services/demo-service/1.0"; 
/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>
POST /demo-service/services/demo-service/1.0 HTTP/1.0
Content-Type: text/xml; charset=utf-8
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: Axis/1.4
Host: localhost:7001
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: ""
Content-Length: 499

<?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><GetDemo 
xmlns="http://demo.radialpoint.com/service";><Boing xmlns=""><MyPayload>boing 
boing</MyPayload></Boing><Blahs xmlns=""><Blahs><MyPayload>nyuk 
nyuk</MyPayload></Blahs><Blahs><MyPayload>da da 
da</MyPayload></Blahs></Blahs></GetDemo></soapenv:Body></soapenv:Envelope>
HTTP/1.1 200 OK
Connection: close
Date: Tue, 31 Jan 2006 20:25:43 GMT
Content-Type: text/xml; charset=utf-8
X-Powered-By: Servlet/2.4 JSP/2.0


<?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><GetDemoResponse
 xmlns="http://demo.radialpoint.com/service";><Foos xsi:type="ns1:Foo" xmlns="" 
xmlns:ns1="http://demo.radialpoint.com/type";><MyPayload>hello</MyPayload></Foos><Bars
 xsi:type="ns2:Bar" xmlns="" 
xmlns:ns2="http://demo.radialpoint.com/type";><MyPayload>good</MyPayload></Bars><Bars
 xsi:type="ns3:Bar" xmlns="" 
xmlns:ns3="http://demo.radialpoint.com/type";><MyPayload>bye</MyPayload></Bars><SomeNumber
 xsi:type="ns4:positiveFloat" xmlns="" 
xmlns:ns4="http://demo.radialpoint.com/service";>11.7</SomeNumber></GetDemoResponse></soapenv:Body></soapenv:Envelope>

Reply via email to