Hi Waruna,

You can handle exceptions in REST APIs with fault sequences. For the REST
error handling, there are well-known error codes. You can use those error
codes as HTTP_SC when you returning the error back to the client.

http://www.restapitutorial.com/httpstatuscodes.html

http://msdn.microsoft.com/en-us/library/windowsazure/dd179357.aspx

Thanks,
Chanaka




On Tue, Mar 4, 2014 at 1:13 PM, Waruna Jayaweera <waru...@wso2.com> wrote:

> Hi Krishantha,
> I also need to handle some exceptions on Rest calls.
> Is there any default value for HTTP_SC ?
> or Do we need to set it based on the filtering of ERROR_CODE.
>
> Thanks,
> Waruna
>
>
> On Tue, Feb 11, 2014 at 4:48 PM, Krishantha Dinesh 
> <kr...@krishantha.com>wrote:
>
>> problem solved. Thanks Dushan for guidance
>>
>> regex based on [1]
>>
>> <filter source="get-property('ERROR_CODE')"
>> regex="[1|3|4][0-9][0-9][0-9][0-9][0-9]">
>> <then>
>> <property name="HTTP_SC" value="400" scope="axis2" />
>> </then>
>> </filter>
>>
>> [1] http://docs.wso2.org/display/ESB460/Error+Handling+and+Error+Codes
>>
>>
>>
>> On Tue, Feb 11, 2014 at 10:48 AM, Dushan Abeyruwan <dus...@wso2.com>wrote:
>>
>>> Hi
>>> You can setup HTTP_SC in axis2 context set 400 (which represents bad
>>> Request)
>>>
>>>
>>> On Tue, Feb 11, 2014 at 10:42 AM, Krishantha Dinesh <
>>> kr...@krishantha.com> wrote:
>>>
>>>> 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 <dus...@wso2.com>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 <
>>>>> kr...@krishantha.com> 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 <dus...@wso2.com>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 <
>>>>>>> kr...@krishantha.com> 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
>>>>>>>> Dev@wso2.org
>>>>>>>> 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
>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> 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
>> Dev@wso2.org
>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>
>>
>
>
> --
> Regards,
>
> Waruna Lakshitha Jayaweera
> Software Engineer
> WSO2 Inc; http://wso2.com
> phone: +94713255198
>
> _______________________________________________
> Dev mailing list
> Dev@wso2.org
> http://wso2.org/cgi-bin/mailman/listinfo/dev
>
>


-- 
--
Chanaka Fernando
Technical Lead
WSO2, Inc.; http://wso2.com
lean.enterprise.middleware

mobile: +94 773337238
Blog : http://soatutorials.blogspot.com
LinkedIn:http://www.linkedin.com/pub/chanaka-fernando/19/a20/5b0
Twitter:https://twitter.com/chanakaudaya
Wordpress:http://chanakaudaya.wordpress.com
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to