You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Deepal Jayasinghe (JIRA)" <ji...@apache.org> on 2007/06/27 10:38:25 UTC

[jira] Resolved: (AXIS2-2850) "In" MessageContext.envelope is overwritten by "Fault" MessageContext.envelope on Exception

     [ https://issues.apache.org/jira/browse/AXIS2-2850?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Deepal Jayasinghe resolved AXIS2-2850.
--------------------------------------

    Resolution: Fixed

fixed in current SVN
 RV - 551095

> "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 <ch...@opensource.lk>
> 	reply-to		axis-user@ws.apache.org	 
> 	to		axis-user@ws.apache.org	 
> 	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: weeznat@hotmail.com <ma...@hotmail.com>
> > To: axis-user@ws.apache.org <ma...@ws.apache.org>
> > 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: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org