Keith Bohnenberger wrote:

Is this different than the "wrapper" element convention.  It sounds like
the same thing.

I agree. We might not call it a wrapper, but it serves the same purpose. So if I have two operations named process and validate, and they both take a PurchaseOrder input message, my wsdl looks like this:


  <schema ...>
   <complexType name="PurchaseOrder">
    ...
   </complexType>

   <complexType name="ValidatePo">
    <sequence>
     <element name="purchaseOrder" type="tns:PurchaseOrder"/>
    </sequence>
   </complexType>

   <complexType name="ProcessPo">
    <sequence>
     <element name="purchaseOrder" type="tns:PurchaseOrder"/>
    </sequence>
   </complexType>

   <element name="validatePo" type="tns1:ValidatePo"/>
   <element name="processPo" type="tns1:ProcessPo"/>

</schema>

  <wsdl:message name="processRequest">
     <wsdl:part element="impl:processPo"/>
  </wsdl:message>

  <wsdl:message name="validateRequest">
     <wsdl:part element="impl:validatePo"/>
  </wsdl:message>

My operations now have a unique wire signature.

My service methods are a bit clumsy:

  public PurchaseOrder process(ProcessPo ppo) {
    PurchaseOrder po = ppo.getPurchaseOrder();
    ...
  }

And my clients need to create the wrapper object in addition to the PurchaseOrder. But that seems like the price we pay for interoperability. It's certainly better than depending on an ad-hoc mechanism like SOAPAction.

Anne, thanks for the reference to the Basic Profile.

Regards,
Mike
        



-----Original Message-----
From: Anne Thomas Manes [mailto:[EMAIL PROTECTED] Sent: Friday, November 14, 2003 8:42 AM
To: [EMAIL PROTECTED]
Subject: Re: How to define document/literal service with multiple
operatio ns


According to the WS-I Basic Profile, a Doc/Literal service is required
to have a unique wire signature for each operation. What that means is that


the child element of the soap:Body must have a unique QName. This uniqueness should be sufficient information for dispatching purposes.
The QName doesn't need to be the same as the operation name. It's simply a matter of mapping the Qname to a method, which you can do in the WSDD.


Anne

At 12:49 AM 11/14/2003, you wrote:

Keith Bohnenberger wrote:


It seems to me that the SOAP spec needs a SOAPOperation part that
loosely (more loosely than rpc with methods and parameters but tighter
than the "wrapper" element convention that is not defined anywhere).

The


SOAPOperation section of the SOAP message would provide the operation

to


be performed and the expected return "message".  The SOAP body would
simply have the document/literal data and would not have anything

about


operations.


did you look on WS-Addressing? http://www-106.ibm.com/developerworks/webservices/library/ws-add/

you described pretty well motivation for it.

best,

alek


In other words I want the loose coupling of document/literal with a

more


defined way to realize the operation to be performed and the expected
return document/literal message.  The "wrapper" element way of

handling


this is a convention that is not defined anywhere in the WSDL spec or
the SOAP spec. Its a programmer way of handling the problem not a
standard.

I guess one way to avoid all of this is to have one document/literal

web


service per operation but I dont think anyone recommends that.


Keith


-----Original Message-----
From: Michael Woinoski [mailto:[EMAIL PROTECTED]

Sent:


Thursday, November 13, 2003 5:35 PM
To: [EMAIL PROTECTED]
Subject: Re: How to define document/literal service with multiple
operatio ns

Hi, Ranjith. What you are suggesting is basically an rpc-literal
operation. Several postings to this list have mentioned that

rpc-literal


is not
(yet) supported by all Web service implementations (even though it is
recommended in the WS-I Basic Profile), so I'd prefer to avoid rpc-literal for
interoperability.


That leaves using SOAPAction for routing document-literal operations.

It


sounds like the HTTPActionHandler should do it but I haven't figured

out


how to

configure it.

Thanks,
Mike

PILLAI,RANJITH (HP-PaloAlto,ex1) wrote:




Hi Michael,

I hope you are using Message style service here.
I don't how to add this to axis client. But u can edit your SOAP


message




directly if you are using tcpmon. So in tcpmon add another


element(your




operation name)directly under soap body. For some reason axis client


is not




doing this(if you find please let me know too :)).

For eg: if you look into your tcpmon, you can see under soap body,


your




document is appended directly with out a wrapper element.

<soapenv:Body>
       <your document>
</soapenv:Body>

so edit it like this...

<soapenv:Body>
       <your-method-name>
               <your document>
       </your-method-name>
</soapenv:Body>

then resend tcpmon.

This way you can invoke any method in your webservice. Unfortunately

I


don't



know to write an axis client for this.

Hope this helps(Not a complete answer, but partial).

Cheers,
Ranjith Pillai.



-----Original Message-----
From: Michael Woinoski [mailto:[EMAIL PROTECTED]

Sent:


Thursday, November 13, 2003 1:47 PM
To: Axis User mailing list
Subject: How to define document/literal service with multiple


operations




How can I define a document/literal service with multiple operations?
Because there's no wrapper element around the input message parts,

Axis


seems


to




have a problem invoking the correct service method.

If I add a value for SOAPAction in the service's binding, the client


stubs




set SOAPAction in the HTTP request correctly, but Axis doesn't use

the


SOAPAction value. I found the Axis HTTPActionHandler class and tried adding it to


the


request flow in the service's deploy.wsdd but it didn't seem to make

a




difference. Does Axis support this? If so, how do I configure it?

Thanks,
Mike





-- The best way to predict the future is to invent it - Alan Kay







--


Mike Woinoski                      Pine Needle Consulting
mailto:[EMAIL PROTECTED]



Reply via email to