Hi,
When I generate the classes using a WSDL I get a return type of Object[] instead of the java.util.List object. From what I understand List is serializable.
Any reason why it is changing the return type to Object[]?
Thanks,
-Ray
-
Returning java.util.List in Axis (3 messages)
- Posted by: Ray F
- Posted on: December 23 2004 17:30 EST
Threaded Messages (3)
- Returning java.util.List in Axis by Ray F on December 27 2004 17:57 EST
- Returning java.util.List in Axis by Martin Straus on December 28 2004 09:08 EST
- Returning java.util.List in Axis by padma nandyala on January 19 2005 11:09 EST
- Returning java.util.List in Axis by Martin Straus on December 28 2004 09:08 EST
-
Returning java.util.List in Axis[ Go to top ]
- Posted by: Ray F
- Posted on: December 27 2004 17:57 EST
- in response to Ray F
Here's a little more info on this subject:
Java interface used to generate WSDL.
//**** iDAO.java
import java.util.List;
public interface iDAO {
public List executeQuery(String s);
public int executeUpdate(String s);
}
WSDL file generate by running Java2WSDL using iDAO.class (above)
//****daoservice.wsdl
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://Interface.daopackage" xmlns:impl="http://Interface.daopackage" xmlns:intf="http://Interface.daopackage" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
<wsdl:message name="executeUpdateResponse">
<wsdl:part name="executeUpdateReturn" type="xsd:int"/>
</wsdl:message>
<wsdl:message name="executeQueryResponse">
<wsdl:part name="executeQueryReturn" type="soapenc:Array"/>
</wsdl:message>
<wsdl:message name="executeQueryRequest">
<wsdl:part name="in0" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="executeUpdateRequest">
<wsdl:part name="in0" type="xsd:string"/>
</wsdl:message>
<wsdl:portType name="iDAO">
<wsdl:operation name="executeQuery" parameterOrder="in0">
<wsdl:input name="executeQueryRequest" message="impl:executeQueryRequest"/>
<wsdl:output name="executeQueryResponse" message="impl:executeQueryResponse"/>
</wsdl:operation>
<wsdl:operation name="executeUpdate" parameterOrder="in0">
<wsdl:input name="executeUpdateRequest" message="impl:executeUpdateRequest"/>
<wsdl:output name="executeUpdateResponse" message="impl:executeUpdateResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="DAOServiceSoapBinding" type="impl:iDAO">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="executeQuery">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="executeQueryRequest">
<wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://Interface.daopackage"/>
</wsdl:input>
<wsdl:output name="executeQueryResponse">
<wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://Interface.daopackage"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="executeUpdate">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="executeUpdateRequest">
<wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://Interface.daopackage"/>
</wsdl:input>
<wsdl:output name="executeUpdateResponse">
<wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://Interface.daopackage"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="iDAOService">
<wsdl:port name="DAOService" binding="impl:DAOServiceSoapBinding">
<wsdlsoap:address location="http://thehost:8082/axis/services/DAOService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
IDAO.java generated by running WSDL2Java using above WSDL.
/**
* IDAO.java
*
* This file was auto-generated from WSDL
* by the Apache Axis WSDL2Java emitter.
*/
package com.rf3labs.services.dbconn.dao.ws;
public interface IDAO extends java.rmi.Remote {
public java.lang.Object[] executeQuery(java.lang.String in0) throws java.rmi.RemoteException;
public int executeUpdate(java.lang.String in0) throws java.rmi.RemoteException;
}
You will notice that the return type of executeQuery method is java.lang.Object[] rather than what was defined in iDAO.java interface whic is java.util.List. -
Returning java.util.List in Axis[ Go to top ]
- Posted by: Martin Straus
- Posted on: December 28 2004 09:08 EST
- in response to Ray F
Ray:
Axis generates client-side classes from the service's WSDL. In the WSDL you have NO WAY of knowing how is a collection (list, set or whatever) implemented in the server-side. So, Axis makes a choice and returns Object[].
What if you're trying to use a third-party WebService? You don't know if it is implemented in Java (where you have java.util.List) or COBOL (where you have something else I don't know).
I believe there's some weird way to plug your own code generator into WSDL2Java, if you MUST use java.util.List.
Regards,
Martin -
Returning java.util.List in Axis[ Go to top ]
- Posted by: padma nandyala
- Posted on: January 19 2005 11:09 EST
- in response to Martin Straus
Check this link:
http://www-106.ibm.com/developerworks/xml/library/ws-tip-roundtrip1.html
I think ur problem is similiar to the one expalined in the article....