[jboss-user] [JBossWS] - Re: change HTTP status code in a WS fault

derek.adams do-not-reply at jboss.com
Fri Dec 7 17:54:50 EST 2007


The only way I could figure out to do it was to change the JBossWS source code in RequestHandlerImpl. It's a small change, but since it violates the "must return a 500 on fault" rule, I doubt it's going to get added as a perm fix. I wish there was a way to make flex work with the 500 error code :-( ... The fix is for the 2.0.0.GA source under org.jboss.wsf.stack.jbws.RequestHandlerImpl at line 287.. change it to..

            if (httpResponse != null && code == null && isFault)
  |             {
  |                httpResponse.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
  |             }
  | 

This way.. if the response code is set in a handler, it overrides the 500 response code. The only thing left to do is register a handler on the web service via the @HandlerChain annotation. The handler should have the following method...

	/*
  | 	 * (non-Javadoc)
  | 	 * 
  | 	 * @see javax.xml.ws.handler.Handler#close(javax.xml.ws.handler.MessageContext)
  | 	 */
  | 	public void close(MessageContext context) {
  | 		context.put(MessageContextJAXWS.HTTP_RESPONSE_CODE, new Integer(200));
  | 		context.setScope(MessageContextJAXWS.HTTP_RESPONSE_CODE, Scope.APPLICATION);
  | 	}
  | 

And.. voila.. it should work with Flex. Note that this will change all 500 responses from web services to 200s. A better approach might be to add code to the handler to check if it's Flex requesting the data (via the ServletRequst passed in the message context) and only change the code in that instance.

Hope that helps,
Derek

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4111337#4111337

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4111337



More information about the jboss-user mailing list