> BTW, the SOAP spec is not very clear about this issue. > I don't know which one is correct according the specification... Maybe > someone here will have some clue about that.
That's why the WS-I Basic Profile prohibits use of SOAP encoding. SOAP encoding is underspecified, so there is no definitive answer. - Anne -----Original Message----- From: WAJSBERG Julien RD-BIZZ [mailto:[EMAIL PROTECTED] Sent: Thursday, September 23, 2004 5:37 AM To: [EMAIL PROTECTED] Subject: Re: Axis and .NET interoperability - Arrays I have a similar question, but using RPC/Encoded: Weblogic and Axis serialize nested arrays in different ways. With the same service (weblogic server): The (Weblogic) WSDL describes this element like this : <xsd:complexType name="ArrayOfArrayOfString"> <xsd:complexContent> <xsd:restriction base="soapenc:Array"> <xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[,]"> </xsd:attribute> </xsd:restriction> </xsd:complexContent> </xsd:complexType> Axis soap envelope : <strings xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[][5]" xmlns:ns2="java:language_builtins.lang" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <item soapenc:arrayType="xsd:string[3]"> <item>data i=0, j=0</item> <item>data i=0, j=1</item> <item>data i=0, j=2</item> </item> <item soapenc:arrayType="xsd:string[3]"> <item>data i=1, j=0</item> <item>data i=1, j=1</item> <item>data i=1, j=2</item> </item> ... </strings> Weblogic call : <strings soapenc:arrayType="xsd:string[5,3]"> <string xsi:type="xsd:string">data i=0, j=0</string> <string xsi:type="xsd:string">data i=0, j=1</string> <string xsi:type="xsd:string">data i=0, j=2</string> <string xsi:type="xsd:string">data i=1, j=0</string> <string xsi:type="xsd:string">data i=1, j=1</string> <string xsi:type="xsd:string">data i=1, j=2</string> ... <strings> For same service, but exposed with Axis 1.2b3 : WSDL says : <complexType name="ArrayOfArrayOf_xsd_string"> <complexContent> <restriction base="soapenc:Array"> <attribute ref="soapenc:arrayType" wsdl:arrayType="soapenc:string[][]"/> </restriction> </complexContent> </complexType> Axis call : <in0 soapenc:arrayType="soapenc:string[][5]" xsi:type="ns1:ArrayOfArrayOf_xsd_string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <item soapenc:arrayType="soapenc:string[3]" xsi:type="soapenc:Array"> <item xsi:type="soapenc:string">data i=0, j=0</item> <item xsi:type="soapenc:string">data i=0, j=1</item> <item xsi:type="soapenc:string">data i=0, j=2</item> </item> <item soapenc:arrayType="soapenc:string[3]" xsi:type="soapenc:Array"> <item xsi:type="soapenc:string">data i=1, j=0</item> <item xsi:type="soapenc:string">data i=1, j=1</item> <item xsi:type="soapenc:string">data i=1, j=2</item> </item> ... </in0> And Weblogic can't even serialize : javax.xml.soap.SOAPException: failed to serialize class [[Ljava.lang.String;weblogic.xml.schema.binding.SerializationException: mapping lookup failure. class=class [Ljava.lang.String; class context=TypedClassContext{schemaType=['urn:TestsAxis']:ArrayOfString} (and I don't know what to do to correct this). BTW, the SOAP spec is not very clear about this issue. I don't know which one is correct according the specification... Maybe someone here will have some clue about that. -- Julien Anne Thomas Manes a �crit : >According to the WS-I Basic Profile [1] (see Section 4.3.3) > >Given the XML Schema Description: > ><xsd:element name="MyArray1" type="tns:MyArray1Type"/> ><xsd:complexType name="MyArray1Type"> > <xsd:sequence> > <xsd:element name="x" type="xsd:string" > minOccurs="0" maxOccurs="unbounded"/> > </xsd:sequence> ></xsd:complexType> > >The envelope would serialize as (omitting namespace declarations for >clarity): > ><MyArray1> > <x>abcd</x> > <x>efgh</x> ></MyArray1> > >Note that this is the proper way to define an array using document literal. >This type of definition should generate a wrapper (<MyArray1>) for the array >elements (<x>). If you have defined your array this way, but it does not >generate the <MyArray1> wrapper element, then there's obviously a bug. > >Nested arrays work pretty much the same way -- there should always be a >wrapper element for the array elements. > >Given the XML Schema Description: > ><xsd:element name="MyArray1" type="tns:MyArray1Type"/> ><xsd:complexType name="MyArray1Type"> > <xsd:sequence> > <xsd:element name="MyArray2" type="tns:MyArray2Type" > minOccurs="0" maxOccurs="unbounded"/> > </xsd:sequence> ></xsd:complexType> ><xsd:complexType name="MyArray2Type"> > <xsd:sequence> > <xsd:element name="x" type="xsd:string" > minOccurs="0" maxOccurs="unbounded"/> > </xsd:sequence> ></xsd:complexType> > >The envelope would serialize as (omitting namespace declarations for >clarity): > ><MyArray1> > <MyArray2> > <x>abcd</x> > <x>efgh</x> > </MyArray2> > <MyArray2> > <x>ijkl</x> > <x>mnop</x> > </MyArray2> ></MyArray1> > >I suspect that the interop problems may be caused by the way the Schema >definitions are generated. Can you provide us with the generated XML Schema >definitions of the nested arrays? > >[1] >http://www.ws-i.org/Profiles/BasicProfile-1.1-2004-08-24.html#soapenc_Array > >- Anne > >
