Anne Thomas Manes wrote:
<soap:Body> cannot contain text content, so the response must be
returned as a child element of the <soap:Body>. Also, when using
wrapped or document, the message part must reference an element, not a
type.
  
Anne, thanks again for your detailed response!  I appreciate it because I couldn't find anywhere with good documentation on responses.

It seems to me that, since you must add a wrapper element when returning a scalar value, it's more consistent to always add the wrapper element.  Also, as you said, this is also the .NET convention.  Ie,
    int getUserAge(String name)
returns
 <soapenv:Body>
   <tns:getUserAgeResponse>
       5
   </tns:getUserAgeResponse>
 </soapenv:Body>
Therefore (for consistency)
   User getUser(String name)
 returns
 <soapenv:Body>
   <tns:getUserResponse>
       <user>
          ...
       </user>
   </tns:getUserResponse>
 </soapenv:Body>
I understand that this isn't a requirement, just a convention.

Bill
So what I'm saying is that wrapped/literal is doc/literal. Elements
that you define as your request and response message parts are what
will be sent as the child element of the <soap:Body>. e.g.:

<wsdl:message name="getUserRequest">
 <wsdl:part name="parameters" element="tns:getUser"/>
</wsdl:message>

results in:

<soapenv:Body>
   <tns:getUser xmlns:tns="..." />
</soapenv:Body>
 
and 

<wsdl:message name="getUserResponse">
 <wsdl:part name="parameters" element="tns:user"/>
</wsdl:message>

results in 

<soapenv:Body>
   <tns:user xmlns:tns="..." />
</soapenv:Body>


Whether using wrapped or document style, the <soap:Body> must contain
at most one direct child element. (i.e., at most one body part). When
using wrapped, the convention is that the request message body part
element has the same name as the operation name. There's no specific
convention for the return message, but it should map to the return
value for the operation.

When using document, the request message body part doesn't have the
same name as the operation, but it still must contain at most one
part.

-Anne

On Thu, 13 Jan 2005 12:43:03 +0900, Bill Keese
<[EMAIL PROTECTED]> wrote:
  
Cool, thanks!   Are you implying that document/literal and wrapped/literal
are the same w.r.t. the return value?  The difference is only for the
request?

Also, does your answer implay that a scalar return value can be represented
simply like this?

<soapenv:Body>
  Hello World!
</soapenv:Body>

And the WSDL would be this?
<wsdl:message name="getUserResponse">
    
 <wsdl:part name="parameters"
  
type="xsd:string"/>
    
</wsdl:message>
Bill
  
Anne Thomas Manes wrote: 
If you want your return value to be a User object, then that should be
    
your
  
return structure, not getUserResponse.
i.e.,
    

<soapenv:Body>
<user>
<name>John Smith</name>
<address>10 Main
  
St.</address>
    
</user>
</soapenv:Body>


The output message should be defined
  
so:
    

<wsdl:message name="getUserResponse">
 <wsdl:part name="parameters"
  
element="tns:user"/>
    
</wsdl:message>

- Anne

On Wed, 12 Jan 2005 18:41:24
  
+0900, Bill Keese
    
<[EMAIL PROTECTED]> wrote:
 
  
I have a few questions about return values from a method in
a
    
wrapped/literal server.

(1) My getUser() method returns a
  
structure:
    

User getUser(String id);

I know that for wrapped/literal the
  
input message should
be
    
<soapenv:Body>
<getUser>
<id>jsmith</id>
</getUser>
</soapenv:Body>

What
  
should the response be, such that a client's generated stubs
(for
    
wrapped/literal mode) don't contain any unnecessary structures? IE,
  
if
    
this is the return
  
value:
    

<soapenv:Body>
<getUserResponse>
<user>
<name>John
  
Smith</name>
    
<address>10 Main
  
St.</address>
    
</user>
</getUser>
</soapenv:Body>

Will .NET generate a
  
function stub like this?
    
User getUser(String id)

or will it generate a stub
  
like this?
    

GetUserResponse getUser(String id);

where GetUserResponse is a
  
dummy wrapper class like this:
    

class GetUserResponse { User user; }

(2)
  
Has anyone gotten this to work with Axis? I hand-wrote my WSDL file,
    
and
  
then used WSDL2Java to generate the deploy.wsdd file. I see two
    
problems in
  
my testing but I wonder if anyone can confirm or deny.
    
a) Axis seems to want
  
to print 2 nested
tags
    
<soapenv:Body>
<getUserResponse>
<getUserResult>
...
</getUserResult>
</getUserResponse
I
  
think <getUserResponse> is parallel to the <getUser> (wrapper tag),
    
and
  
<getUserResult> is possibly to differentiate between the return
    
value and
  
output parameters.
    

b) The <user> tag itself is not printed; only the fields
  
inside of the
    
User class are printed. It's as though Axis is assuming the
  
User class
    
is a wrapper class that contains a list of output values

Can
  
anyone comment on these things? Thanks!
    
Bill


  

Reply via email to