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]