[ 
https://issues.apache.org/jira/browse/AXIS2-3879?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17727102#comment-17727102
 ] 

Ralf Hauser commented on AXIS2-3879:
------------------------------------

Still a problem is v1.8.2

Also, a non-2XX HttpServletResponse status should not be overwritten 
(especially if it is 5XX already), so in AxisServlet.java:387ff, it should 
along the lines of

    void processAxisFault(MessageContext msgContext, HttpServletResponse res,
                          OutputStream out, AxisFault e) {
        try {
            // If the fault is not going along the back channel we should be 
202ing
            if (AddressingHelper.isFaultRedirected(msgContext)) {
                res.setStatus(HttpServletResponse.SC_ACCEPTED);
            } else {

                String status =
                        (String) 
msgContext.getProperty(Constants.HTTP_RESPONSE_STATE);
                if (status == null) {
                    log.error("processAxisFault() found a null HTTP status from 
the MessageContext"
                            + " instance, setting HttpServletResponse status 
to: " +
                            // or rather to 
HttpServletResponse.SC_INTERNAL_SERVER_ERROR ?
                            Constants.HTTP_RESPONSE_STATE);
                    int statI = res.getStatus();
                    if (300 > statI) {
                        
res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                    } else {
                        log.error("processAxisFault() found a non 2XX HTTP 
status "
                                + "from the response object, so keeping "
                                + "HttpServletResponse status on: " + statI);
                    }
                } else {
                    log.error("processAxisFault() found an HTTP status from the 
"
                            + "MessageContext instance, setting 
HttpServletResponse "
                            + "status to: " + status);
                    int statI = res.getStatus();
                    if (300 > statI) {
                        res.setStatus(Integer.parseInt(status));
                    } else {
                        log.error("processAxisFault() found a non 2XX HTTP 
status "
                                + "from the response object, so keeping "
                                + "HttpServletResponse status on: " + statI);
                    }
                    //no further details written to the body
                    return;
                }

 

> Ability to change the http status code in the response being sent to the 
> client
> -------------------------------------------------------------------------------
>
>                 Key: AXIS2-3879
>                 URL: https://issues.apache.org/jira/browse/AXIS2-3879
>             Project: Axis2
>          Issue Type: Improvement
>          Components: transports
>    Affects Versions: 1.4
>            Reporter: nikki
>            Priority: Major
>
> Hello
> I'd like the ability to change the http status code in the reponse. For 
> example : I'd like to send in certain cases an http 503 (instead of a 500) 
> when a soap fault occurs. Another of my needs is to send a 202 (instead of 
> 200 for an in-out operation.)
> Here's what i attempted which didn't work & I was suggested by Saminda to 
> open a JIRA.
>  HttpServletResponse resp =  (HttpServletResponse) 
>  
> msgContext.getCurrentMessageContext().getProperty(org.apache.axis2.transport.http.HT
>  TPConstants.MC_HTTP_SERVLETRESPONSE); 
> if (resp != null) {
>  System.out.println("Resp not null ");
>  resp.setStatus(503 );
>  }
>  thankyou



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
For additional commands, e-mail: java-dev-h...@axis.apache.org

Reply via email to