Hi Dushan, Thanks for prompt reply. I do agree with you. my concern is http response got which client get on transport headers. pls refer below
This is what client get as exception <Response xmlns="http://cd-rhettige/services/paypal_lookupSale"> <error_code>101503</error_code> <error_message>Error connecting to the back end</error_message> </Response> ======================================== this is the raw content. pls pay your attention for http status code HTTP/1.1 200 OK Authorization: Bearer OQaph7mMZJbvNDJ-8u9ICVm4Q4kkJmNj.w5dQJZ5u8E Host: cd-rhettige:8280 Accept-Encoding: gzip,deflate Content-Type: application/json Date: Tue, 11 Feb 2014 05:06:58 GMT Server: WSO2-PassThrough-HTTP Transfer-Encoding: chunked Connection: Keep-Alive { "error_code":"101503", "error_message":"Error connecting to the back end" } On Tue, Feb 11, 2014 at 10:04 AM, Dushan Abeyruwan <[email protected]> wrote: > Hi, > No its wrong, we shouldn't response with 200 OK for exceptions. IMO ideal > way as I think, to do this by keep the catalog of connector specific error > code and embedded in the error message and explain those _ _connector > specific error _ _ catalog in documentation more specifically, and > returning a generic error with status code to client. > > for error catalogs you could refer [1][2] > [1]http://www.twilio.com/docs/errors/reference > [2] > http://www.stormpath.com/blog/spring-mvc-rest-exception-handling-best-practices-part-1 > e.g > > > { > "status": 404, > * "code": 40483,* > "message": "Oops! It looks like that file does not exist.", > "developerMessage": "File resource for path /uploads/foobar.txt does not > exist. Please wait 10 minutes until the upload batch completes before > checking again.", > "moreInfo": "http://www.mycompany.com/errors/40483" > } > > > > On Tue, Feb 11, 2014 at 9:51 AM, Krishantha Dinesh > <[email protected]>wrote: > >> Hi Dushan/Dev >> I tried ur solution and its work. but i have other question. when it >> catch FAULT (500 error) on return message of client http code is 200 OK >> for example let say endpoint is fail the it catch that fault. but in >> client point of view http respond code of his response is 200 >> >> other than 500 client getting correct http response code. the problem may >> be this is originate by ESB it self than come as response to ESB. btw is >> there any solution for this. >> >> >> >> On Sat, Feb 8, 2014 at 7:30 PM, Dushan Abeyruwan <[email protected]> wrote: >> >>> Hi Kirshantha, >>> Handling fault has two flavors, >>> >>> - Handle internal fault such as service EP not available and all the >>> issues related . >>> - Handle Service faults. >>> >>> >>> Ideally when BE is SOAP and if it returns SOAP fault in order to >>> handle such queries we normally append FORCE_ERROR_ON_SOAP_FAULT property, >>> this works only of BE return Service faults and when such happen if we need >>> to divert such responses to the faultSequence that we have defined. >>> On the other hand if that is RESTful BE, we do not have a inbuilt >>> function to determine whether its a fault at transport level, so the >>> workaround that we normally do is to use the Filter base on the HTTP_SC. >>> If you look at [1] status codes represents 100 series and 200- series >>> regards as non faulty responses, and other than that we can determine them >>> as faults or defect, to overcome such station when deal with RESTful >>> services personally I am using filters i.e >>> >>> OutSequence ..etc , below logic just evaluates the response and if that >>> not falls between 200 series normally you can add your customize faulty >>> response logic .. >>> >>> <filter source="$axis2:HTTP_SC" regex="^[^2][0-9][0-9]"> >>> <then> >>> <log level="custom"> >>> >>> - can include payload >>> - can setup HTTP_SC to axis2 context >>> - can use <respond> mediator to reply client with error. >>> >>> .............. >>> .............. >>> >>> </then> >>> </filter> >>> >>> >>> [1] http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html >>> >>> >>> >>> >>> >>> On Fri, Feb 7, 2014 at 7:54 PM, Krishantha Dinesh >>> <[email protected]>wrote: >>> >>>> I have used following code to handle error on soap call >>>> >>>> proxy >>>> ============== >>>> >>>> <faultSequence> >>>> <makefault version="soap11"> >>>> <code xmlns:tns=" >>>> http://www.w3.org/2003/05/soap-envelope" >>>> value="get-property('FAULT_CODE')" /> >>>> <reason expression="get-property('ERROR_CODE')" /> >>>> <detail expression="get-property('ERROR_MESSAGE')" /> >>>> </makefault> >>>> <send /> >>>> </faultSequence> >>>> >>>> Output >>>> ============== >>>> <soapenv:Envelope xmlns:soapenv=" >>>> http://schemas.xmlsoap.org/soap/envelope/"> >>>> <soapenv:Body> >>>> <soapenv:Fault> >>>> <faultcode xmlns:tns="http://www.w3.org/2003/05/soap-envelope >>>> ">123456</faultcode> >>>> <faultstring>abc</faultstring> >>>> <detail>xyz</detail> >>>> </soapenv:Fault> >>>> </soapenv:Body> >>>> </soapenv:Envelope> >>>> >>>> >>>> I need to know what is the best approach to handle exception on REST >>>> calls. >>>> >>>> i tried to apply same way just for try but it only give ERROR_MESSAGE >>>> not another... >>>> >>>> my expectation is to deliver all exception to client (caller). eg: >>>> transport error due to unavailable endpoint.. etc >>>> >>>> >>>> _______________________________________________ >>>> Dev mailing list >>>> [email protected] >>>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>>> >>>> >>> >>> >>> -- >>> Dushan Abeyruwan | Associate Tech Lead >>> Integration Technologies Team >>> PMC Member Apache Synpase >>> WSO2 Inc. http://wso2.com/ >>> Blog:http://dushansview.blogspot.com/ >>> Mobile:(0094)713942042 >>> >>> >> > > > -- > Dushan Abeyruwan | Associate Tech Lead > Integration Technologies Team > PMC Member Apache Synpase > WSO2 Inc. http://wso2.com/ > Blog:http://dushansview.blogspot.com/ > Mobile:(0094)713942042 > >
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
