----- Original Message -----
Sent: Friday, October 25, 2002 1:02
PM
Subject: Problem with multi-dimensional
array
I just updated to Axis 1.0, but I'm having
trouble with a multi-dimensional array. The client is sending a 2
dimensional array to the server, and everything looks fine in the request, but
the server throws an exception when trying to parse it. I thought axis
1.0 is meant to support multi-dimensional arrays now?
Can anyone tell me what's going
wrong?
Thanks
Martin
The relevant part of the request looks like
this:
<iteratedMergeFieldData
xsi:type="ns1:IteratedMergeFieldData">
<iterationName
xsi:type="xsd:string">lineitems</iterationName>
<fieldValuesArray xsi:type="soapenc:Array"
soapenc:arrayType="xsd:string[5]" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<item>lineitemvalue0</item>
<item>lineitemvalue1</item>
<item>lineitemvalue2</item>
<item>lineitemvalue3</item>
<item>lineitemvalue4</item>
</fieldValuesArray>
<fieldValuesArray xsi:type="soapenc:Array"
soapenc:arrayType="xsd:string[5]" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<item>lineitemvalue0</item>
<item>lineitemvalue1</item>
<item>lineitemvalue2</item>
<item>lineitemvalue3</item>
<item>lineitemvalue4</item>
</fieldValuesArray>
</iteratedMergeFieldData>
The relevant part of the WSDL looks like
this:
<complexType
name="IteratedMergeFieldData">
<sequence>
<element name="iterationName"
nillable="true" type="xsd:string"/>
<element
maxOccurs="unbounded" name="fieldValuesArray" nillable="true"
type="impl:ArrayOf_xsd_string"/>
</sequence>
</complexType>
<complexType name="ArrayOf_xsd_string">
<complexContent>
<restriction
base="soapenc:Array">
<attribute
ref="soapenc:arrayType"
wsdl:arrayType="xsd:string[]"/>
</restriction>
</complexContent>
</complexType>
The axis log looks like this:
761725 [HttpProcessor[8080][4]] ERROR
org.apache.axis.encoding.ser.BeanPropertyTarget - Could not convert
[Ljava.lang.String; to bean field 'fieldValuesArray', type
[Ljava.lang.String;
761735 [HttpProcessor[8080][4]] ERROR
org.apache.axis.transport.http.AxisServlet -
Exception:
AxisFault
faultCode:
{http://xml.apache.org/axis/}Server.userException
faultString:
java.lang.IllegalArgumentException: argument type
mismatch
faultActor: null
faultDetail:
stackTrace:
java.lang.IllegalArgumentException: argument type mismatch
at
org.apache.axis.encoding.ser.BeanPropertyTarget.set(BeanPropertyTarget.java:175)
at
org.apache.axis.encoding.DeserializerImpl.valueComplete(DeserializerImpl.java:260)
at
org.apache.axis.encoding.ser.ArrayDeserializer.valueComplete(ArrayDeserializer.java:544)
at
org.apache.axis.encoding.DeserializerImpl.endElement(DeserializerImpl.java:502)
at
org.apache.axis.encoding.DeserializationContextImpl.endElement(DeserializationContextImpl.java:942)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:206)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:684)
at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:207)
at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:265)
at
org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:190)
at
org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:276)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71)
at
org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:156)
at
org.apache.axis.SimpleChain.invoke(SimpleChain.java:126)
at
org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:437)
at
org.apache.axis.server.AxisServer.invoke(AxisServer.java:316)
at
org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:701)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at
org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:335)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
etc...