OK. I looked over your mail again and I saw a problem. You are using document/literal, right? For the request, you should have the name of the method within your soap body. And for the response, I'm not sure what is correct but I listed my hypothesis below. (I'm still figuring it out myself)

Here's the current request:

    <soap:Body>
       <tns:in0>ABC</tns:in0>
    </soap:Body>
 </soap:Envelope>

You are calling the method "reverse" with the parameter "in0", right? I think the SOAP body should be:

<soap:Body>
  <reverse>
    <in0>ABC</in0>
 </reverse>
</soap:Body>

(I'm not sure about the namespaces though)

Here's the current response

 <soapenv:Body>
    <in0Return xmlns="http://ws.moon.net/j2me05";>CBA</in0Return>
 </soapenv:Body></soapenv:Envelope>

It thinks that in0 is the name of your method, rather than the name of the parameter to the method.

To setup the request, you need a schema type with the same name as your method:

<schema xmlns="http://www.w3.org/2001/XMLSchema";
targetNamespace="http://ws.moon.net/j2me05"; elementFormDefault="qualified">
 <complexType name="reverse">
     <element name="in0" type="xsd:string"/>
 </complexType>
</schema>

Then you setup a message that just points to the schema type (it's useless but 
you have to put it in because that's the way WSDL works):

<wsdl:message name="reverseRequest">
    <wsdl:part name="parameters" element="impl:reverse"/>
</wsdl:message>


I'm not sure how to setup the WSDL with regard to responses. If you look at http://www.n2soft.net/Services/HNDCAP.asmx?wsdl (or other links from www.mindreef.com), you will see this:

<s:element name="PostScoreResponse">
 <s:complexType>
   <s:sequence>
     <s:element minOccurs="1" maxOccurs="1" name="PostScoreResult" 
type="s:boolean"/>
   </s:sequence>
 </s:complexType>
</s:element>

<wsdl:message name="PostScoreSoapOut">
 <wsdl:part name="parameters" element="tns:PostScoreResponse"/>
</wsdl:message>

(Again, the message just points to the schema definition, where the element name is 
methodName + "Response".
I guess that this would produce a response like

<soap:Body>
  <PostScoreResponse>
     <PostScoreResult>42</PostScoreResult>
  </PostScoreResponse>
</soap:Body>

It seems like a lot of overhead for one number but I've got a feeling that the 
clients won't work unless you structure it like that.  I'm still experimenting 
though.


Bill

Ephemeris Lappis wrote:

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
----------------





Reply via email to