We've run into the same problem with Flash. It won't be your first, believe me.

We got around this by writing a standard servlet filter that wraps the servlet response object with its own implementation. The implementation overrides the sendError and setStatus methods on the response class, and change the status code from 500 to 200 as necessary. Works like a charm, and isn't specific to XFire (we needed this same hack for Axis as well).

Hope this helps,
Andrew

Roman Dolgov wrote:
Isn't it SOAP fault would be part of the body? (I am not that deep into web services)

I am trying to tweak status code because Adobe Flex manual have the following statement:

"On web browsers, when a service returns any status code other than 200, Adobe Flash Player cannot read the body of the response. If the status code is 500 and the body contains a fault, there is no way to get to the fault. The proxy works around this issue by forcing the status code for faults to 200; the player passes the body of the response along with the
fault intact. "

(I cannot use flex proxy - it's requires additional server side module I don't have)

That kind of implies that fault is the part of the body, and body cannot be read by Flash Player for any other code then 200.

I don't expect any other clients use the same web service, so I don't really worry if SOAP response is 100% up to spec. That's why I try to figure out is there are any way to add some handler or something else to have control over HTTP status code.

Any ideas are very appreciated.

Thank you,
Roman


On 2/14/07, *Tomek Sztelak* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    You can't. HTTP status code 500 is required by SOAP spec if fault is
    returned ( as i remember :). But why you try to use SOAP body? Some
    additional info can be added to SOAP faults.

    On 2/14/07, Roman Dolgov <[EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]> > wrote:
     > How to change HTTP response code from 500 to 200 in fault handler?
     >
     > I'm trying to use fault mechanism to pass exception details from
    XFire to
     > Adobe Flex WS client but cannot get access to SOAP body if HTTP
    code more
     > then 200. So I want to add fault handle that would process my
    exception,
     > setup fault parameters and change HTTP status code to 200.
     >
     > It there any way I can do it? If yes, any code samples I can
    refer to?
     >
     > public class MyFaultHandler extends AbstractHandler {
     >
     >     public void invoke(MessageContext context) throws Exception {
     >
     >       // context.getResponse.setStatus(200) ?????????
     >
     >     }
     > }
     >
     > Thanks
     > Roman
     >


    --
    -----
    When one of our products stops working, we'll blame another vendor
    within 24 hours.

    ---------------------------------------------------------------------
    To unsubscribe from this list please visit:

        http://xircles.codehaus.org/manage_email



---------------------------------------------------------------------
To unsubscribe from this list please visit:

   http://xircles.codehaus.org/manage_email

Reply via email to