Hi,

and now, the second problem !
It's more like a problem with arrays.

We're still trying to expose, in RPC/Literal style, the following java class :

public class BusinessStructImpl {
   public String[] echoStringArray(String[] param) {
       return param;
   }
  public ArrayBean echoArrayBean(ArrayBean param) {
       return param;
  }
}

ArrayBean has two attributes : stringData (a String) and an array of SimpleBean :
SimpleBean has only two attributes : intData (an int) and stringData (a String) with associated getters and setters.


At first, the following was in the automatically generated WSDD (by WSDL2Java, from Java2WSDL's WSDL):

<typeMapping
       xmlns:ns="urn:TestsAxis"
       qname="ns:ArrayOf_xsd_string"
       type="java:java.lang.String[]"
       serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
       deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
       encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
     />
<typeMapping
       xmlns:ns="urn:TestsAxis"
       qname="ns:ArrayOf_tns3_SimpleBean"
       type="java:com.bean.SimpleBean[]"
       serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
       deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
       encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
     />
<beanMapping
       xmlns:ns="http://bean.com";
       qname="ns:ArrayBean"
   languageSpecificType="java:com.bean.ArrayBean"
/>
<beanMapping
       xmlns:ns="http://bean.com";
       qname="ns:SimpleBean"
       languageSpecificType="java:com.bean.SimpleBean"
/>

With this WSDD, the WSDL generated from the servlet seems to be correct :

<complexType name="ArrayOf_xsd_string">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="item" type="xsd:string"/>
</sequence>
</complexType>
<complexType name="ArrayOf_tns1_SimpleBean">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="item" type="tns1:SimpleBean"/>
</sequence>
</complexType>
and
<><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>


But then, we get the following server-side exceptions, when trying to call the service (Weblogic client):

for echoStringArray :
javax.xml.rpc.soap.SOAPFaultException: org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.


for echoBeanArray :
SOAP Fault:javax.xml.rpc.soap.SOAPFaultException: org.xml.sax.SAXException: Invalid element in com.bean.SimpleBean - item


Questions :
1 - Why is there a SimpleDeserializer in the exception whereas we registered an ArraySerializer ? (I think I saw the same problem in another mail today)
2 - Why do we get an "invalid element exception", because it seems to be correct according to the WSDL ?


Thanks again !

Kind regards,
--
Julien Wajsberg

Reply via email to