Hi

I just committed a quick fix for it.
http://svn.apache.org/viewvc?rev=918453&view=rev

Willem


Claus Ibsen wrote:
Hi

Here is the JIRA ticket
https://issues.apache.org/activemq/browse/CAMEL-2519

On Wed, Mar 3, 2010 at 9:25 AM, Claus Ibsen <[email protected]> wrote:
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 <[email protected]> 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 <[email protected]> wrote:
On Tue, Mar 2, 2010 at 4:25 PM, Leen Toelen <[email protected]> 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