[ https://issues.apache.org/jira/browse/AXIS2-2850?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Davanum Srinivas updated AXIS2-2850: ------------------------------------ Assignee: Deepal Jayasinghe > "In" MessageContext.envelope is overwritten by "Fault" > MessageContext.envelope on Exception > ------------------------------------------------------------------------------------------- > > Key: AXIS2-2850 > URL: https://issues.apache.org/jira/browse/AXIS2-2850 > Project: Axis 2.0 (Axis2) > Issue Type: Bug > Components: kernel > Affects Versions: 1.2 > Environment: Axis2 1.2, Tomcat 5.5. > Reporter: Kevin > Assignee: Deepal Jayasinghe > Priority: Blocker > > To reproduce: > - Use wsdl2java to create a web service > - create a custom handler extending AbstractHandler > - Add a <phase> entry in the axis.xml to execute the handler PostDispatch > - In the web service skeleton class, implement the service by throwing the > declared exception. The exception should cause the fault message defined in > the wsdl to be returned in the SOAP response > - run a test on the web service > - When the custom handler is invoked, attempt to retrieve the "In" soap > envelope using > msgContext.getOperationContext().getMessageContext("In").getEnvelope() > - the "In" envelope is the "Fault" envelope, but it should be the original > incoming soap message envelope. > Note that if the exception is not thrown in the skeleton class, the "In" > envelope is the correct value. > As far as I can see, the offending code is: AxisServlet.handleFault() line > 368: > 366 : saminda 509437 MessageContext faultContext = > 367 : > MessageContextBuilder.createFaultMessageContext(msgContext, e); > 368 : saminda 509952 > msgContext.setEnvelope(faultContext.getEnvelope()); > from Eran Chinthaka <[EMAIL PROTECTED]> > reply-to [EMAIL PROTECTED] > to [EMAIL PROTECTED] > date Jun 24, 2007 12:44 AM > subject Re: [Axis2] Accessing SOAP message from MessageContexts > in Handlers > mailed-by ws.apache.org > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > This seems to be a bug for me. Can you please create a JIRA giving > enough information to re-create this problem. Also please mark the issue > as a blocker as I think this should be fixed before the next release. > Thanks, > Chinthaka > Kevin TierOne wrote: > > Hi Wayne, > > > > We've talked about this but I thought I'd post to see if anyone else can > > give us insight. > > > > > > The original message context of the > > MySoapReceiverInOut.invokeBusinessLogic() code stores the incoming soap > > envelope. If your skeleton throws an exception, AxisFault.handleFault() > > will replace the messageContext's soap envelope with > > faultContext.getEnvelope(). If there is no exception in your code, the > > setEnvelope() call is not invoked. > > > > > > The reason why you cannot use > > msgContext.getOperationContext().getMessageContext("In") to get the > > orignal envelope, is that the getMessage("In") refers to the original > > message context (because the hashmap stores a reference to original > > message context). Its envelope was overwritten with the fault envelope > > during the fault handling. Not sure why there is also a > > getMessage("Fault") that returns the same envelope. Perhaps it's a bug > > or maybe there is a reason for this. I don't know enough about the > > Axis2 code. > > > > > > Kevin > > > > ------------------------------------------------------------------------ > > From: [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> > > To: [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> > > Subject: Accessing SOAP message from MessageContexts in Handlers > > Date: Wed, 20 Jun 2007 16:09:20 -0400 > > > > > > Using Axis2 1.2. Is there a way to read the original SOAP message > > within a PostDispatch Handler? > > > > I'm invoking a custom handler in the PostDispatch phase. The > > handler reads the uses the MessageContext to get the original soap > > request message. Something like this: > > > > String > > > > incomingMsg=msgContext.getOperationContext().getMessageContext("In").getEnvelope().toString(); > > System.out.println("Original SOAPMessage: "+incomingMsg); > > > > This works fine in the success case. The problem is if the Skeleton > > code throws an exception, the above code prints the "Fault" soap > > message. For example, the following code prints exactly the same > > output: > > > > String > > > > incomingMsg=3DmsgContext.getOperationContext().getMessageContext("In").getEnvelope().toString(); > > System.out.println("SOAPMessage: "+incomingMsg);=0A= > > > > String > > > > faultMsg=3DmsgContext.getOperationContext().getMessageContext("Fault").getEnvelope().toString(); > > System.out.println("SOAPMessage: "+faultMsg); > > > > Am I doing something incorrectly? Is there another way to get the > > original SOAP message in a Handler? > > > > Thanks, > > Wayne > > -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]