axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kevin (JIRA)" <j...@apache.org>
Subject [jira] Created: (AXIS2-2850) "In" MessageContext.envelope is overwritten by "Fault" MessageContext.envelope on Exception
Date Mon, 25 Jun 2007 12:27:26 GMT
"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
            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 <chinthaka@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 <mailto:weeznat@hotmail.com>
> To: axis-user@ws.apache.org <mailto:axis-user@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


Mime
View raw message