I am trying to establish if the problem described below is an existing bug, or if it is new. I looked in the AXIS BUGZILLA, and found a couple array related bugs, though they do not seem similar to the one I got.
I hope that anybody out there can help. I have written a web service using BEA weblogic 6.1. It returns a value object with another "detail" array of value object inside it. I have included the WSDL of the service and the original send and received SOAP XML message snatched using TCPMON. I am trying to use the webservice using AXIS, I have generated the client code from the services WSDL using WSDL2JAVA. It had worked great for my first simple webservice but threw a "java.lang.IllegalArgumentException: argument type mismatch" exception with my more complex test. I downloaded the AXIS source and managed to debug the code some. The AXIS client receives the SOAP message 100% intact from the webservice. But looks like it gets confused and tries to process the returned array of VOs twice. The web service worked just great when consumed by a BEA weblogic test client. But I would much rather use a more "generic" client like AXIS. Please find below my version numbers, error message stack trace, WSDL, and SOAP sent and received XML. Thanks in advance for looking at my email! Version Info: App server: BEA weblogic 6.1 JDK: 1.3.1 AXIS version: Beta 1 March 16 Error Message Stack Trace: - Could not convert [Lejb.cruise.booking.companyname.com.CruiseRouteVO; to bean field 'cruiseRouteVOArr[0]', type ejb.cruise.booking.companyname.com.CruiseRouteVO - Exception: java.lang.IllegalArgumentException: argument type mismatch at org.apache.axis.encoding.ser.BeanPropertyTarget.set(BeanPropertyTarget.java:131) at org.apache.axis.encoding.DeserializerImpl.valueComplete(DeserializerImpl.java:258) at org.apache.axis.encoding.ser.ArrayDeserializer.valueComplete(ArrayDeserializer.java:539) at org.apache.axis.encoding.DeserializerImpl.endElement(DeserializerImpl.java:501) at org.apache.axis.encoding.DeserializationContextImpl.endElement(DeserializationContextImpl.java:865) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:203) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:578) at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:207) at org.apache.axis.message.RPCElement.getParams(RPCElement.java:231) at org.apache.axis.client.Call.invoke(Call.java:1607) at org.apache.axis.client.Call.invoke(Call.java:1515) at org.apache.axis.client.Call.invoke(Call.java:1095) at ws.cruise.booking.companyname.com.CruiseWSBindingStub.getCruise(CruiseWSBindingStub.java:163) at ws.cruise.booking.companyname.com.CruiseWSTestCaseGetCruise.test2CruiseWSPortGetCruise(CruiseWSTestCaseGetCruise.java:31) at ws.cruise.booking.companyname.com.CruiseWSTestCaseGetCruise.main(CruiseWSTestCaseGetCruise.java:76) Remote Exception caught: java.lang.IllegalArgumentException: argument type mismatch End of WS call reached WSDL: <definitions targetNamespace="java:com.companyname.booking.cruise.ws" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:util="java:java.util" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:tns="java:com.companyname.booking.cruise.ws" xmlns:ejb="java:com.companyname.booking.cruise.ejb" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> <types> <schema targetNamespace="java:java.util" xmlns="http://www.w3.org/1999/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/soap/encoding/" xmlns:util="java:java.util"> <complexType name="Date"> <attribute name="time" type="long"/> <attribute name="date" type="int"/> <attribute name="minutes" type="int"/> <attribute name="month" type="int"/> <attribute name="year" type="int"/> <attribute name="day" type="int"/> <attribute name="hours" type="int"/> <attribute name="timezoneOffset" type="int"/> <attribute name="seconds" type="int"/> </complexType> </schema> <schema targetNamespace="java:com.companyname.booking.cruise.ejb" xmlns="http://www.w3.org/1999/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ejb="java:com.companyname.booking.cruise.ejb"> <complexType name="ArrayOfCruiseVO"> <complexContent> <restriction base="soap:Array"> <attribute ref="soap:arrayType" wsdl:arrayType="ejb:CruiseVO[]"/> </restriction> </complexContent> </complexType> <complexType name="CruiseRouteVO"> <attribute name="arriveTime" type="string"/> <attribute name="arriveCity" type="string"/> <attribute name="cruiseNum" type="int"/> <attribute name="departTime" type="string"/> <attribute name="departCity" type="string"/> <attribute name="routeNum" type="int"/> </complexType> <complexType name="CruiseVO"> <attribute name="briefDesc" type="string"/> <attribute name="label" type="string"/> <attribute name="costPp" type="int"/> <attribute name="costPc" type="int"/> <attribute name="cruiseNum" type="int"/> <sequence> <element name="cruiseRouteVOArr" type="ejb:CruiseRouteVO" maxOccurs="unbounded"/> </sequence> </complexType> </schema> </types> <message name="getAvailCruisesRequest"> <part name="arg0" type="util:Date"/> </message> <message name="getAvailCruisesResponse"> <part name="return" type="ejb:ArrayOfCruiseVO"/> </message> <message name="getCruiseRequest"> <part name="arg0" type="xsd:int"/> </message> <message name="getCruiseResponse"> <part name="return" type="ejb:CruiseVO"/> </message> <portType name="CruiseWSPortType"> <operation name="getAvailCruises"> <input message="tns:getAvailCruisesRequest"/> <output message="tns:getAvailCruisesResponse"/> </operation> <operation name="getCruise"> <input message="tns:getCruiseRequest"/> <output message="tns:getCruiseResponse"/> </operation> </portType> <binding name="CruiseWSBinding" type="tns:CruiseWSPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="getAvailCruises"> <soap:operation soapAction="urn:getAvailCruises"/> <input> <soap:body use="encoded" namespace="urn:CruiseWS" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="urn:CruiseWS" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> <operation name="getCruise"> <soap:operation soapAction="urn:getCruise"/> <input> <soap:body use="encoded" namespace="urn:CruiseWS" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="urn:CruiseWS" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <service name="CruiseWS"> <documentation>todo</documentation> <port name="CruiseWSPort" binding="tns:CruiseWSBinding"> <soap:address location="http://localhost:7001/web-services/CruiseWSuri"/> </port> </service> </definitions> SOAP Request: POST /web-services/CruiseWSuri HTTP/1.0 Content-Length: 497 Host: localhost Content-Type: text/xml; charset=utf-8 SOAPAction: "urn:getCruise" <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:getCruise xmlns:ns1="urn:CruiseWS"> <arg0 xsi:type="xsd:int">1</arg0> </ns1:getCruise> </SOAP-ENV:Body> </SOAP-ENV:Envelope> SOAP Response: HTTP/1.0 200 OK Date: Fri, 19 Apr 2002 17:39:24 GMT Server: WebLogic WebLogic Server 6.1 SP1 09/18/2001 14:28:44 #138716 Content-Type: text/xml; charset=UTF-8 Connection: Close <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns0:getCruiseResponse xmlns:ns0="urn:local" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <ns0:return xsi:type="bean:CruiseVO" xmlns:bean="java:com.companyname.booking.cruise.ejb"> <briefDesc xsi:type="xsd:string">This is a budget 2 day cruise around the coast line of Alaska.</briefDesc> <label xsi:type="xsd:string">ALASKAN SUNSHINE</label> <cruiseRouteVOArr xsi:type="SOAP-ENC:Array" xmlns:bean="java:com.companyname.booking.cruise.ejb" SOAP-ENC:arrayType="bean:CruiseRouteVO[2]"> <item xsi:type="bean:CruiseRouteVO" xmlns:bean="java:com.companyname.booking.cruise.ejb"> <arriveTime xsi:type="xsd:string">2002-02-21 00:00:00.0</arriveTime> <arriveCity xsi:type="xsd:string">Kodiak</arriveCity> <cruiseNum xsi:type="xsd:int">1</cruiseNum> <departTime xsi:type="xsd:string">2002-01-21 00:00:00.0</departTime> <routeNum xsi:type="xsd:int">1</routeNum> <departCity xsi:type="xsd:string">Anchorage </departCity> </item> <item xsi:type="bean:CruiseRouteVO" xmlns:bean="java:com.companyname.booking.cruise.ejb"> <arriveTime xsi:type="xsd:string">2002-04-21 00:00:00.0</arriveTime> <arriveCity xsi:type="xsd:string">Another city</arriveCity> <cruiseNum xsi:type="xsd:int">1</cruiseNum> <departTime xsi:type="xsd:string">2002-03-21 00:00:00.0</departTime> <routeNum xsi:type="xsd:int">2</routeNum> <departCity xsi:type="xsd:string">Kodiak</departCity> </item> </cruiseRouteVOArr> <costPp xsi:type="xsd:int">299</costPp> <cruiseNum xsi:type="xsd:int">1</cruiseNum> <costPc xsi:type="xsd:int">500</costPc> </ns0:return> </ns0:getCruiseResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Johnny Klopper Software Engineer NEORIS USA 4055 International Plaza, Suite 600 Fort Worth, TX 76109 Tel.: (1-817) 731-0995 x264 [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> www.neoris.com/usa <http://www.neoris.com/usa>