Hi

The custom binding is a good solution IMHO since you got a fair amount
of logic to return different error codes.

But you can also check out this user thread about custom error codes
http://old.nabble.com/Default-error-handler%2C-changing-HTTP-response-code-ts27721146.html

And maybe we should support setting a custom
Exchange.HTTP_RESPONSE_CODE code to be used for exceptions as well.
Let me create a JIRA for that.


On Wed, Mar 3, 2010 at 9:08 AM, Leen Toelen <toe...@gmail.com> wrote:
> Hi,
>
> I had to use a custom httpBinding, since the DefaultHttpBinding
> doWriteExceptionResponse always writes error code 500. I had to change
> this because I wanted to have distinct error code depending on what
> exactly went wrong. If the XSD validating fails, I return a 400 Bad
> Request, when the queue is full I return a 504 Gateway timeout. The
> client can than handle the response in different ways if he wants.
>
> Is it intentionally that 500 is always returned by default or is there
> a different way to specify the error code? I tried using the
> Exchange.HTTP_RESPONSE_CODE header but this does only work for
> non-exception cases.
>
>       �...@override
>        public void doWriteExceptionResponse(Throwable exception,
>                        HttpServletResponse response) throws IOException {
>                int errorCode = 500;
>                if (exception instanceof ValidationException) {
>                        errorCode = HttpServletResponse.SC_BAD_REQUEST;
>                } else if (exception instanceof 
> org.apache.camel.ExchangeTimedOutException) {
>                        errorCode = HttpServletResponse.SC_GATEWAY_TIMEOUT;
>                } else if (exception instanceof RollbackExchangeException) {
>                        errorCode = HttpServletResponse.SC_SERVICE_UNAVAILABLE;
>                } else {
>                        errorCode = 
> HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
>                }
>                response.setStatus(errorCode); // 500 for internal server error
>                response.setContentType("text/plain");
>
>                // append the stacktrace as response
>                PrintWriter pw = response.getWriter();
>                exception.printStackTrace(pw);
>
>                pw.flush();
>        }
>
> Regards,
> Leen
>
> On Tue, Mar 2, 2010 at 4:46 PM, Claus Ibsen <claus.ib...@gmail.com> wrote:
>> On Tue, Mar 2, 2010 at 4:25 PM, Leen Toelen <toe...@gmail.com> wrote:
>>> Hi,
>>>
>>> I am trying to run this route:
>>>
>>>                <route id="RestToTopic">
>>>                        <from 
>>> uri="jetty:http://0.0.0.0:8162/meucci/assembly"; />
>>>                        <doTry>
>>>                                <to uri="xslt:XSLT.xml" />
>>>                                <to uri="validator:XSD.xsd" />
>>>                                <inOnly uri="activemq:topic:Topic" />
>>>                                <setBody><constant></constant></setBody> 
>>> <!-- Return empty body when OK -->
>>>                                <doCatch>
>>>                                
>>> <exception>org.apache.camel.ValidationException</exception>
>>>                                        
>>> <handled><constant>false</constant></handled>
>>>                                        <!-- TODO: Return exception message 
>>> on ValidationException -->
>>>                            </doCatch>
>>>                        </doTry>
>>>                </route>
>>>
>>> but I would like to get the validation exception message as the result
>>> body. Is this possible?
>>>
>>
>> Yeah from the simple language etc.
>> http://camel.apache.org/simple.html
>>
>> <setBody><simple>${exception.message}</simple></setBody>
>>
>>> Regards,
>>> Leen
>>>
>>
>>
>>
>> --
>> Claus Ibsen
>> Apache Camel Committer
>>
>> Author of Camel in Action: http://www.manning.com/ibsen/
>> Open Source Integration: http://fusesource.com
>> Blog: http://davsclaus.blogspot.com/
>> Twitter: http://twitter.com/davsclaus
>>
>



-- 
Claus Ibsen
Apache Camel Committer

Author of Camel in Action: http://www.manning.com/ibsen/
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Reply via email to