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 ax...@ws.apache.org on 2004/10/06 13:21:32 UTC

[jira] Closed: (AXIS-1335) MessageContext.setMessage() clashes with JAX-RPC Handler behavior

Message:

   The following issue has been closed.

   Resolver: Davanum Srinivas
       Date: Wed, 6 Oct 2004 4:21 AM

Shantanu says that this got fixed with his patch for bug AXIS-1513 please test and let us know if there is a problem with 1.2RC1 or nightly.

thanks,
dims
---------------------------------------------------------------------
View the issue:
  http://issues.apache.org/jira/browse/AXIS-1335

Here is an overview of the issue:
---------------------------------------------------------------------
        Key: AXIS-1335
    Summary: MessageContext.setMessage() clashes with JAX-RPC Handler behavior
       Type: Bug

     Status: Closed
   Priority: Major
 Resolution: FIXED

    Project: Axis
 Components: 
             Basic Architecture

   Assignee: Davanum Srinivas
   Reporter: Algirdas Veitas

    Created: Sat, 24 Apr 2004 12:49 PM
    Updated: Wed, 6 Oct 2004 4:21 AM
Environment: Need to apply patch that was submitted in bug #1310

Description:
As per the JAX-RPC specification, when a JAX-RPC Handler returns a value "false" from handleRequest, it is the responsibility of the Handler to set the appropriate response message, during the invocation of handleRequest.  See below for relevant specification documentation.  If I am misinterpreting, please let me know!! 

With that said, a JAX-RPC Compliant handler used within Axis cannot achieve the desired results in this scenario.  When the handle calls
setMessage(SOAPMessage) to set the response message, the actual implementation of MessageContext sets this value to the internal requestMessage because "havePastPivot" is set to false.  The internal method of MessageContext is setCurrentMessage().

The following code snippet and documentaiton explains in more detail.  Full handler is attached.

public boolean handleRequest(MessageContext context) {

    SOAPMessageContext soapMsgContext = (SOAPMessageContext)context;
    SOAPMessage faultMessage = buildFaultMessage();

    // SETTING THE FAULT MESSAGE FOR THE RESPONSE ENVELOPE, HOWEVER
    // SINCE THIS IS A JAX-RPC HANDLER USING AXIS AND
    // org.apache.axis.MessageContext AS A CONCRETE IMPLEMENTATION
    // "havePastPivot" IS SET TO FALSE SO THIS FAULT MESSAGE
    // WILL BE ASSIGNED TO THE REQUEST MESSAGE!!
    soapMsgContext.setMessage(faultMessage);
    return false;
}

// 
public void setCurrentMessage(Message curMsg)
{
   curMsg.setMessageContext(this);

        if (havePassedPivot) {
            responseMessage = curMsg;
        } else {
            requestMessage = curMsg;
        }
    }
}

-- START RELEVANT JAX-RPC 1.1 DOCUMENTATION ----
"Return false to indicate blocking of the request handler chain. In this case, further processing of the request handler chain is blocked and the target service endpoint is not dispatched. The JAX-RPC runtime system takes the responsibility of invoking the response handler chain next with the appropriate SOAPMessageContext. The Handler implementation class has the responsibility of setting the response SOAP message in the handleRequest method and perform additional processing in the handleResponse method. In the default processing model, the response handler chain starts processing from the same Handler instance (that returned false) and
goes backward in the execution sequence."
-- END RELEVANT JAX-RPC 1.1 DOCUMENTATION ----



---------------------------------------------------------------------
JIRA INFORMATION:
This message is automatically generated by JIRA.

If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa

If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira