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> 

Reply via email to