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#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...