Hello All,
I'm getting an IllegalArgumentException in the server while
deserializing an array of array ([][]) object. Axis is calling the
setter method with an array([]) where as the method expects an array of
array([][]).
I'm using wsdl2java for generating both the server and client side
stubs. I tried with both axis 1.2.1 & 1.3 and am getting the same result.
Sorry for the long email.
Schema in the WSDL looks like
<complexType name="columnType">
<attribute name="name" type="string" />
<attribute name="type" type="string" />
</complexType>
<complexType name="rowValueType">
<attribute name="value" type="string" />
</complexType>
<complexType name="rowType">
<sequence>
<element name="Data" type="tns:rowValueType"
minOccurs="1" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="exceptionType">
<sequence>
<element name="ExceptionType" type="string"
maxOccurs="1" minOccurs="1"/>
<element name="Column" type="tns:columnType"
minOccurs="1" maxOccurs="unbounded" />
<element name="Row" type="tns:rowType" minOccurs="1"
maxOccurs="unbounded" />
</sequence>
</complexType>
Generated Java class for the ExceptionType contains a two dimensional
array for 'row'.
public class ExceptionType implements java.io.Serializable {
private java.lang.String exceptionType;
private pushresults.ColumnType[] column;
private pushresults.RowValueType[][] row;
public ExceptionType() {
}
public ExceptionType(
java.lang.String exceptionType,
pushresults.ColumnType[] column,
pushresults.RowValueType[][] row) {
this.exceptionType = exceptionType;
this.column = column;
this.row = row;
}
..... other bean methods
}
When deserializing the incoming request in the server(Tomcat), axis
calls the setRow() method with a RowValueType[] object, where as the
signature of the setter method is RowValueType[][]. Exception from the
axis log can be found at the end of this email.
Any idea how to rectify this or what mistake I'm doing?. Is there any
property I should set in the server-config.wsdd?
Thanks for your help.
Thanks,
Narayanan
_ Exception in the Axis Log:_
- Could not convert [Lpushresults.RowValueType; to bean field 'row',
type [Lpushresults.RowValueType;
- NSPop (32)
- Popped element stack to org.apache.axis.message.MessageElement:Exception
- Exit: DeserializationContext::endElement()
- org.apache.axis.i18n.resource::handleGetObject(toAxisFault00)
- Enter: SOAPPart ctor(FORM_FAULT)
- org.apache.axis.i18n.resource::handleGetObject(setMsgForm)
- Setting current message form to: FORM_FAULT (currentMessage is now
org.apache.axis.AxisFault)
- Exit: SOAPPart ctor()
- Enter: SimpleChain::onFault
- Exit: SimpleChain::onFault
- org.apache.axis.i18n.resource::handleGetObject(axisFault00)
- AxisFault:
- NSPush (32)
- org.apache.axis.i18n.resource::handleGetObject(empty00)
- NSPop (empty)
- NSPush (32)
- org.apache.axis.i18n.resource::handleGetObject(empty00)
- NSPop (empty)
- NSPush (32)
- org.apache.axis.i18n.resource::handleGetObject(empty00)
- NSPop (empty)
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.lang.IllegalArgumentException: argument type mismatch
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:java.lang.IllegalArgumentException:
argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.apache.axis.utils.BeanPropertyDescriptor.set(BeanPropertyDescriptor.java:142)
at
org.apache.axis.encoding.ser.BeanPropertyTarget.set(BeanPropertyTarget.java:100)
at
org.apache.axis.encoding.DeserializerImpl.valueComplete(DeserializerImpl.java:249)
at
org.apache.axis.encoding.ser.ArrayDeserializer.valueComplete(ArrayDeserializer.java:583)
at
org.apache.axis.encoding.DeserializerImpl.endElement(DeserializerImpl.java:509)
at
org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:171)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
at
org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:148)
at
org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at
org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at
org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at
org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)