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 >