I found the problem. WSDL2Code did not put correct actionMapping into services.xml for some reason. After I fixed it everything went fine.
--- Paul Gonchar <[EMAIL PROTECTED]> wrote: > Well, > the reason why I'm talking about SOAPAction header > is > that my app does not work. The problem is that > server > skeleton always tries to invoke the same operation > no > matter what method I call on client side. After > debugging I found out that the reason for that is > AxisService.operationsAliasesMap containing value > for > empty string key. And this value is > OutInAxisOperation > instance correspondingod the operation being > invoked. > > My understanding is that when SOAPAction is empty, > AxisEngine must be getting operation name from SOAP > envelop. > > Martin, I agree that "The attributes defined in the > SOAP Header defines how a recipient should *process > the SOAP message*". But you can take a look at > AxisServlet.java(136) where SOAP action header is > extracted, and then HTTPTransportUtils(166,167) > where > value of soapHeader is set into MessageContext. > Finally, SOAPActionBasedDispatcher.java(51) (method > findOperation) where this value is used to find an > appropriate operation. So, you may see that Axis may > use SOAPAction header to specify name of operation. > > I believe in my case operation must be found by > SOAPMessageBodyBasedDispatcher dispatcher. But since > SOAPActionBasedDispatcher finds operation by empty > action first - this dispatcher does not take part. > > I'll try to investigate this issue further and I > will > let you know the results. For now, I found a > workaround - I specify name of operation to invoke > in > request URL. This name gets processed by > RequestURIBasedDispatcher > > Paul. > > > > > > AxisService.operationsAliasesMap contains key value > for empty SOAPAction. Probaly, > > --- Martin Gainty <[EMAIL PROTECTED]> wrote: > > > Paul-- > > > > The W3C spec states- > > The Header MUST CONTAIN actor,mustUnderstand and > > encodingStyle > > To paraphrase > > The attributes defined in the SOAP Header defines > > how a recipient should > > *process the SOAP message* > > > > So my question is why are using those values to > > populate the Header (which > > is specific to the processing characteristics of > the > > SOAP message) > > instead of placing the values in the Body- > > (I guess I dont understand your point on why you > > need to populate the > > header)? > > > > Martin -- > > > > This email message and any files transmitted with > it > > contain confidential > > information intended only for the person(s) to > whom > > this email message is > > addressed. If you have received this email > message > > in error, please notify > > the sender immediately by telephone or email and > > destroy the original > > message without making a copy. Thank you. > > > > ----- Original Message ----- > > From: "Paul Gonchar" <[EMAIL PROTECTED]> > > To: <axis-user@ws.apache.org> > > Sent: Wednesday, May 31, 2006 7:26 PM > > Subject: [Axis2] SOAPAction header is empty > > > > > > > It seems like generated client stubs (generated > by > > > WSDL2Java tool) do not set SOAPAction header. > The > > > header is retreived in AxisServlet.java(137) > > > > > > > > > HTTPTransportUtils.processHTTPPostRequest(msgContext, > > > req.getInputStream(), out, > > > req.getContentType(), > > > req.getHeader(HTTPConstants.HEADER_SOAP_ACTION), > > > > > req.getRequestURL().toString()); > > > > > > This leads to empty soapAction field in > > MessageContext > > > instance. > > > > > > When SOAPActionBasedDispatcher tries to resolve > > > operation (SOAPActionBasedDispatcher.java (54) > it > > gets > > > the appropriate InOutAxisOperation from > > > operationsAliasesMap object of AxisServce. This > > map > > > contains a key for empty string (I'm not sure > why > > this > > > is done) and the value of this key is second > > operation > > > of three I have defined. Hence, whatever > operation > > I > > > invoke on client side - the second operation get > > > called because of an empty SOAPAction header. > > > > > > Another thing I've noticed that when different > > > handlers are applied the first one is HTTP > > handler. It > > > finds appropriate AxisService but it cant find > > axis > > > operation. The next handler is SOAP handler and > it > > > uses instance of AxisService found by HTTP > handler > > - > > > this one gets an empty operation. > > > > > > > > > Paul. > > > > > > > > > messageContext.getSoapAction(); > > > > > > > __________________________________________________ > > > Do You Yahoo!? > > > Tired of spam? Yahoo! Mail has the best spam > > protection around > > > http://mail.yahoo.com > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: > > [EMAIL PROTECTED] > > > For additional commands, e-mail: > > [EMAIL PROTECTED] > > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: > > [EMAIL PROTECTED] > > For additional commands, e-mail: > > [EMAIL PROTECTED] > > > > > > > __________________________________________________ > Do You Yahoo!? > Tired of spam? Yahoo! Mail has the best spam > protection around > http://mail.yahoo.com > > --------------------------------------------------------------------- > To unsubscribe, e-mail: > [EMAIL PROTECTED] > For additional commands, e-mail: > [EMAIL PROTECTED] > > __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]