I had the same problem, and someone gave the answer earlier in another
thread.
You need a class that contains only the array and no more attributes with
the standard get/set methods + getX(int i) and setX(int i, X x) methods.
And your MyService class can return this class instead of an array. This
way you will have classes that conform to doc/lit and axis will
serialize/deserialize them correctly.
But I found it easier to start with a wsdl and use WSDL2Java, then axis
generates the java classes correctly.
ie:
<element name="getDescriptorsResponse">
<complexType>
<sequence>
<element name="descriptors" type="impl:myDescriptorList"/>
</sequence>
</complexType>
</element>
<complexType name="myDescriptor">
<sequence>
<element name="field1" nillable="true" type="xsd:string"/>
<element name="field2" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
<complexType name="myDescriptorList">
<sequence>
<element maxOccurs="unbounded" name="descriptors"
type="impl:myDescriptor"/>
</sequence>
</complexType>
>
>
> My classes
>
> public class MyService {
> public MyDescriptor[] getDescriptors() {
> ...
> }
> }
>
> public class MyDescriptor {
> private String _field1;
> private String _field2;
> ...
> public String getField1() {
> return _field1;
> }
> ...
> }
>
>
>>From my deploy.wsdd:
>
> <service name="MyService" provider="java:RPC"
> style="wrapped" use="literal">
>
> <parameter name="wsdlTargetNamespace"
> value="http://www.schuerig.de/verzeichnisservice"/>
> <parameter name="wsdlServiceElement" value="VerzeichnisService"/>
> <parameter name="wsdlServicePort" value="VerzeichnisPort"/>
>
> <parameter name="className"
> value="de.schuerig.verzeichnisservice.ws.JaxRpcVerzeichnisService"/>
>
> <parameter name="wsdlPortType" value="VerzeichnisPortType"/>
>
> <operation name="getDescriptors"
> xmlns:operNS="http://www.schuerig.de/myservice"
> qname="operNS:getDescriptors"
> returnQName="descriptors"
> soapAction="getDescriptors">
> </operation>
>
> <beanMapping
> xmlns:ns="http://www.schuerig.de/myservice"
> qname="ns:descriptor"
> languageSpecificType="java:de.schuerig.myservice.MyDescriptor"/>
> ...
>
>
> The relevant portion of the generated WSDL looks like this
>
> <element name="getDescriptorsResponse">
> <complexType>
> <sequence>
> <element maxOccurs="unbounded" name="descriptors"
> type="impl:myDescriptor"/>
> </sequence>
> </complexType>
> </element>
> <complexType name="myDescriptor">
> <sequence>
> <element name="field1" nillable="true" type="xsd:string"/>
> <element name="field2" nillable="true" type="xsd:string"/>
> </sequence>
> </complexType>
>
> This already looks fishy. The "descriptors" name doesn't really apply to
> the single items in the sequence, but only to the enclosing complexType
> as a whole.
>
>
> Now, when I call the service, in the SOAP body I get this
>
> <soapenv:Body>
> <getDescriptorsResponse xmlns="">
> <descriptors>
> <item>
> <field1>...</field1>
> <field2>...</field2>
> </item>
> <item>
> ...
> </item>
> ...
> </descriptors>
> </getDescriptorsResponse>
> </soapenv:Body>
>
> which is pretty much what I want, despite my misgivings about the WSDL.
> What I really don't want, though, is the exception I get when I run the
> generated TestCase
>
> org.xml.sax.SAXException: Invalid element in
> de.schuerig.www.verzeichnisservice.VerzeichnisDeskriptor - item
> at
> org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:223)
> at
> org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1031)
> at
> org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
> at
> org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1140)
> at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:238)
> at org.apache.axis.message.RPCElement.getParams(RPCElement.java:386)
> at org.apache.axis.client.Call.invoke(Call.java:2402)
> at org.apache.axis.client.Call.invoke(Call.java:2301)
> at org.apache.axis.client.Call.invoke(Call.java:1758)
>
>
> As far as I understand it, the cause of the problem is how arrays are
> handled here. Axis tries to deserialize the entire return value with a
> BeanSerializer, which can't work. The BeanSerializer applies only to
> single item-elements whereas the enclosing return ought to be handled
> by an ArrayDeserializer.
>
> To me it appears as if Axis is mixing up the types of arrays and their
> elements. Preferably, I hope to be told that the error is on my part
> and that I only need to specify slightly differently what I want in
> order to get it.
>
>
> Michael
>
> --
> Michael Schuerig Nothing is as brilliantly adaptive
> mailto:[EMAIL PROTECTED] as selective stupidity.
> http://www.schuerig.de/michael/ --A.O. Rorty, The Deceptive Self
>