You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Julien Wajsberg (JIRA)" <ax...@ws.apache.org> on 2004/11/22 17:13:26 UTC

[jira] Commented: (AXIS-1673) Problem with array of beans in 1.2RC2 (wrapped/literal)

     [ http://nagoya.apache.org/jira/browse/AXIS-1673?page=comments#action_55739 ]
     
Julien Wajsberg commented on AXIS-1673:
---------------------------------------

Quoted from the mailing list :

"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)."

This workaround works perfectly. The WSDL is slightly different, for the description of ArrayBean :

   <complexType name="ArrayBean">
    <sequence>
     <element maxOccurs="unbounded" name="simpleBeanArrayData" nillable="true" type="tns1:SimpleBean"/>
     <element name="stringData" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
  </schema>

Here, there isn't any wrapping element "item".

I think however that the initial behavior is a bug. I can think of two different correct behaviors :
 - without this getter and setter, axis generates the same WSDL as this one
 - it should accept the SOAP message that is described in the generated WSDL

I tried implementing the service with beans without accessor, using the client to the other service (therefore without "item" elements): the service accepted the message, but it wasn't correctly deserialized (I only got one item in the array).

> Problem with array of beans in 1.2RC2 (wrapped/literal)
> -------------------------------------------------------
>
>          Key: AXIS-1673
>          URL: http://nagoya.apache.org/jira/browse/AXIS-1673
>      Project: Axis
>         Type: Bug
>   Components: Serialization/Deserialization
>     Versions: 1.2RC2
>  Environment: Server : Windows 2000
> Client : Windows Xp
> JVM : Sun 1.4.2
>     Reporter: Julien Wajsberg
>     Priority: Critical

>
> There's a strange bug in axis 1.2RC2, dealing with array of beans.
> The signature of the called method 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 test.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 [à@}]</n2:stringData></n1:item>
> <n1:item xsi:type="n2:SimpleBean"><n2:intData>-123456</n2:intData><n2:stringData>ces données sontcomplexes [à@}]</n2:stringData></n1:item>
> </n2:simpleBeanArrayData><n3:stringData>data</n3:stringData></n1:in0></n1:echoArrayBean>
> 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 soap message, same behaviour.
> -- 
> Julien Wajsberg

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://nagoya.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira