Hi Mike,
No it's not less sleep, or more coffee, or anything else :-).
Correct me if I am wrong, but I am under the impression that axis does not
use SOAP action at all when invoking a service.
If someone wants to use doc\literal service to have multiple operations he
has to explicity map the operation and the doc\literal element in the wsdd
-at least that's what I heard.
Try writing something like this in the wsdd for each operation.
<operation name="methodName" qname="operNS:ElementName" xmlns:operNS="uri"
returnQName="returnName" returnType="rtns:returnType" xmlns:rtns="uri" >
</operation>
Can you please let me know if this works ?
Regards,
Dimuthu.
--
Lanka Software Foundation http://www.opensource.lk
> The plot thickens...after poking around in the source, I found where the
> AxisServlet stores the SOAPAction value:
>
> org.apache.axis.transport.http.AxisServlet.java, line 835:
>
> soapAction = getSoapAction(req);
>
> if (soapAction != null) {
> msgContext.setUseSOAPAction(true);
> msgContext.setSOAPActionURI(soapAction);
> }
>
> Here, the MessageContext stores the SOAPAction value, but I don't see it
> being used for message delivery anywhere. The service operation name is
> set in org.apache.axis.providers.java.RPCProvider.java, line 194:
>
> operation = msgContext.getOperation();
>
> if (operation == null) {
> QName qname = new QName(body.getNamespaceURI(),
> body.getName());
> operation = serviceDesc.getOperationByElementQName(qname);
> }
>
> But RPCProvider doesn't call MessageContext.useSOAPAction, and
> MessageContext.getOperation doesn't check SOAPAction either. It seems
> like that last bit should be something like this:
>
> if (msgContext.useSOAPAction()) {
> String soapAction = msgContext.getSOAPActionURI();
> QName qname = new QName(...) // parse soapAction into URI
> and name operation =
> serviceDesc.getOperationByElementQName(qname);
> }
> else {
> operation = msgContext.getOperation();
>
> if (operation == null) {
> QName qname = new QName(body.getNamespaceURI(),
> body.getName());
> operation =
> serviceDesc.getOperationByElementQName(qname);
> }
> }
>
> Bug, or works-as-designed? I'll take a closer look next week when I have
> more time (or less sleep, or more coffee, or...)
>
> Mike
>
>
> Michael Woinoski wrote:
>
>> Keith,
>>
>>> I agree with all of your points.
>>>
>>> I dont understand web services well enough yet so this question may
>>> be a lame one.
>>>
>>> The SOAPAction is in the WSDL. How does that translate to the actual
>>> SOAP message that is being sent over the wire?
>>
>>
>> The soapAction attribute value in the WSDL is the value the client
>> should assign to the SOAPAction HTTP header in the request message. So
>> it's set by the client, not the service.
>>
>>> My uneducated guess is
>>> that it doesn't. My guess is that the server is suppose to know the
>>> given "soap action" when it receives a given "message". Is that
>>> correct or is there something more specific in the SOAP message that
>>> tells the "soap action"?
>>> I also thought I read somewhere that soapAction in the WSDL was not
>>> suppose to be used.
>>
>>
>> I don't remember seeing that SOAPAction shouldn't be used. Basic
>> Profile says "SOAPAction is purely a hint to processors. All vital
>> information regarding the intent of a message is carried in
>> soap:Envelope." Now exactly what "intent" means, I don't know. Does
>> "intent" include "ultimate destination of message"? Beats me.
>>
>>> I may be wrong about that. At this point I have too
>>> much reading in my small brain to keep it all straight.
>>
>>
>> Ah yes, that bursting skull sensation...
>>
>> Mike
>>
>>>
>>> Keith
>>>
>>> -----Original Message-----
>>> From: Michael Woinoski [mailto:[EMAIL PROTECTED]
>>> Sent: Thursday, November 13, 2003 5:48 PM
>>> To: [EMAIL PROTECTED]
>>> Subject: Re: How to define document/literal service with multiple
>>> operations
>>>
>>> Keith,
>>>
>>>
>>>> With document/literal web services you need to define your schema in
>>>> such a way that the "wrapper" element or root element will lead you
>>>> to the business function. So you are not just defining the data that
>>>
>>>
>>> needs
>>>
>>>> to be sent but also a wrapper element that suggests the operation to
>>>
>>>
>>> be
>>>
>>>> performed.
>>>
>>>
>>>
>>> Well, that may be the way Axis currently routes messages, but I
>>> prefer to develop my application's schema based on what is
>>> appropriate for the application, not because of the limitations
>>> imposed by a
>>> particular implementation. This is exactly the kind of situation that
>>> SOAPAction is
>>>
>>> supposed to address. .NET uses it for routing messages, so I know
>>> Axis HAS to support it ;-) I suspect it's just a matter of
>>> configuring HTTPActionHandler correctly.
>>>
>>> Also, I'd like to keep my web services portable to different JAX-RPC
>>> implementations, so I try to avoid Axis-specific features (e.g.,
>>> Message-style services.)
>>>
>>>
>>>> Read the axis users guide about "service styles"
>>>> specifically the "message", "document" and "wrapped" service styles.
>>>
>>>
>>>
>>> I did. I didn't find anything in the user's guide about the details
>>> of routing document-style services.
>>>
>>> Regards,
>>> Mike
>>>
>>>
>>>> -----Original Message-----
>>>> From: Michael Woinoski [mailto:[EMAIL PROTECTED]
>>>> Sent: Thursday, November 13, 2003 4: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
>>>>
>>>
>>>
>>
>
> --
>
> Mike Woinoski Pine Needle Consulting
> mailto:[EMAIL PROTECTED]