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)

Reply via email to