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