Before i open a bug, i'd like to have the opinion of experts !
All my last tests around document/literal style let me with troubles. To
start again with simple things, i have made a basic service to evaluate the
primary interoperability with my J2ME client. This simple service provides a
single operation that takes a string, reverses it and return it.
On the client side, i work with the SUN Wireless toolkit that support the
JSR172 (web-service for J2ME). Using the axis wsdl i have successfully
generated the j2me client stubs, and built my midlet to call the web
service. At run time, the client reports an error in the server response :
the name of the response part for the return value is not as defined in the
wsdl descriptor. To be sure, i had made the test again putting the tcp
monitor in the middle... and it seems the client is right !
The name of the part in the wsdl is 'reverseReturn' and axis uses
'in0Return'...
Is it a bug, or just another mis-interpretation of mine ?
Thanks to give your opinion before i open an unnecessary bug report...
Here the java code :
--- java interface ---
package net.moon.me.five.ws;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface StringTool extends Remote {
public String reverse(String string) throws RemoteException;
}
----------------------
I have successfully generated the wsdl with the following ant script :
--- wsdl2java ant script ---
<property name="my.namespace" value="http://ws.moon.net/j2me05" />
<java2wsdl output="./wsdl/j2me05ws.wsdl"
className="net.moon.me.five.ws.StringTool"
namespace="${my.namespace}"
porttypename="StringUtility"
serviceportname="StringUtilityPort"
serviceelementname="J2ME05"
style="DOCUMENT"
location="http://ws.moon.net/j2me05">
<classpath>
<pathelement location="${my.services.compile-directory}" />
<path refid="my.axis.classpath" />
</classpath>
</java2wsdl>
----------------------------
The resulting WSDL, with the expected part names !
--- WSDL ---
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://ws.moon.net/j2me05"
xmlns:impl="http://ws.moon.net/j2me05"
xmlns:intf="http://ws.moon.net/j2me05"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<!--WSDL created by Apache Axis version: 1.2RC2
Built on Nov 16, 2004 (12:19:44 EST)-->
<wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://ws.moon.net/j2me05" elementFormDefault="qualified">
<element name="in0" type="xsd:string"/>
<element name="reverseReturn" type="xsd:string"/>
</schema>
</wsdl:types>
<wsdl:message name="reverseRequest">
<wsdl:part name="in0" element="impl:in0"/>
</wsdl:message>
<wsdl:message name="reverseResponse">
<wsdl:part name="reverseReturn" element="impl:reverseReturn"/>
</wsdl:message>
<wsdl:portType name="StringUtility">
<wsdl:operation name="reverse" parameterOrder="in0">
<wsdl:input name="reverseRequest" message="impl:reverseRequest"/>
<wsdl:output name="reverseResponse"
message="impl:reverseResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="StringUtilityPortSoapBinding"
type="impl:StringUtility">
<wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="reverse">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="reverseRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="reverseResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="J2ME05">
<wsdl:port name="StringUtilityPort"
binding="impl:StringUtilityPortSoapBinding">
<wsdlsoap:address location="http://ws.moon.net/j2me05"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
-------------------------------------
And now, the dumped http request and response :
--- request ---
POST /j2me05ws-ejb/J2ME-05-WS/J2ME05WS HTTP/1.1
User-Agent: Profile/MIDP-1.0 Configuration/CLDC-1.0
Content-Language: en-US
Content-Type: text/xml
SOAPAction: "
Content-Length: 315
Host: localhost
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://ws.moon.net/j2me05">
<soap:Body>
<tns:in0>ABC</tns:in0>
</soap:Body>
</soap:Envelope>
---------------
--- response ---
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=75C329A6CED0EE74D896E083043AFA0A; Path=/j2me05ws-ejb
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked
Date: Tue, 21 Dec 2004 14:15:18 GMT
Server: Apache-Coyote/1.1
123
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<in0Return xmlns="http://ws.moon.net/j2me05">CBA</in0Return>
</soapenv:Body></soapenv:Envelope>
0
----------------