I have encountered this same situation with .NET.  To fix the problem we had
to make the array property a Java Bean Indexed Property. Your ArrayBean
needs to have not only the simple getter and setter from simpleBeanArrayData
but also a getter and setter by index, getSimpleBeanArrayData(int i) and
setSimpleBeanArrayData(int i, SimpleBean bean).

This keeps Axis from generating the ArrayOf_ type (which is not valid based
on the WS-I spec).

-----Original Message-----
From: WAJSBERG Julien RD-BIZZ [mailto:[EMAIL PROTECTED] 
Sent: Friday, November 19, 2004 1:16 AM
To: [EMAIL PROTECTED]
Subject: Bug about array of beans in 1.2RC2 (wrapped/literal)


Hi,

We have a strange bug in axis 1.2RC2, dealing with array of beans.

There is a method whose signature is :
 public ArrayBean echoArrayBean(ArrayBean param);

ArrayBean is defined like this :
public class ArrayBean implements Serializable {
    private String stringData;
    private SimpleBean[] simpleBeanArrayData;
... accessors ...
}

And SimpleBean :
public class SimpleBean implements Serializable {
    private String stringData;
    private int intData;
... accessors ...
}

The corresponding part of the WSDL generated by Axis follows (in 
different namespaces, but we don't care here) :
   <element name="echoArrayBean">
    <complexType>
     <sequence>
      <element name="in0" type="tns1:ArrayBean"/>
     </sequence>
    </complexType>
   </element>
   <complexType name="ArrayOf_tns1_SimpleBean">
    <sequence>
     <element maxOccurs="unbounded" minOccurs="0" name="item" 
type="tns1:SimpleBean"/>
    </sequence>
   </complexType>
   <complexType name="SimpleBean">
    <sequence>
     <element name="intData" type="xsd:int"/>
     <element name="stringData" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <complexType name="ArrayBean">
    <sequence>
     <element name="simpleBeanArrayData" nillable="true" 
type="impl:ArrayOf_tns1_SimpleBean"/>
     <element name="stringData" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>

What's important here is that "item" is correctly specified as an 
element of Array_Of_tns1_SimpleBean.

When I try to invoke this operation with a Weblogic client, I get the 
following exception :
java.rmi.RemoteException: SOAP 
Fault:javax.xml.rpc.soap.SOAPFaultException: org.xml.sax.SAXException: 
Invalid element in com.francetelecom.clara.ws2.bean.SimpleBean - item

The corresponding part in the soap message is :
<n1:echoArrayBean><n1:in0><n2:simpleBeanArrayData  
xsi:type="n1:ArrayOf_tns1_SimpleBean">
<n1:item 
xsi:type="n2:SimpleBean"><n2:intData>-123456</n2:intData><n2:stringData>ces 
données sontcomplexes [EMAIL PROTECTED]</n2:stringData></n1:item>
<n1:item 
xsi:type="n2:SimpleBean"><n2:intData>-123456</n2:intData><n2:stringData>ces 
données sontcomplexes [EMAIL PROTECTED]</n2:stringData></n1:item>
</n2:simpleBeanArrayData><n3:stringData>data</n3:stringData></n1:in0></n1:ec
hoArrayBean>

This message seems to be correct, according to the WSDL. Yet, Axis 
doesn't like it :/

Note : we just tried with an Axis client: same behaviour.
-- 
Julien Wajsberg

Reply via email to