Hi

The configure method in the RouteBuilder is only invoked once to setup
the routes.
And constant is creating a constant message.

So what you need to do is to use simple instead to tell Camel to build
a dynamic message with the exception message

See the docs at: http://camel.apache.org/simple



On Thu, Feb 1, 2018 at 8:43 PM, Yacov Schondorf
<yacov.schond...@gmail.com> wrote:
> I have the following global onException clause in my RouteBuilder configure
> method:
>
> onException(BadHeaderException.class)
> .handled(true)
> .transform(constant("Bad API request: " + exceptionMessage()))
> .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(400))
>
> The route is as follows:
>
> from(String.format("jetty://http://0.0.0.0:%d%s",port, KEEP_ALIVE_URI))
> .process(new MyRequiredHeaderProcessor())
> .log("My API called")
> .setBody(simple(KEEP_ALIVE_SUCCESS_MESSAGE));
>
> and  MyRequiredHeaderProcessor may throw BadHeaderException:
>
> class MyRequiredHeaderProcessor implements Processor {
> @Override
> public void process(Exchange exchange) throws Exception {
> final Object myHeader = exchange.getIn().getHeader("MyRequiredHeader");
> if (myHeader == null) {
> throw new BadHeaderException ("Missing header");
> }
> if (!myHeader .equals(someValue)) {
> throw new BadHeaderException("Incorrect  header value");
> }
> }
> }
>
> When I call the jetty URL without the required header, the request is
> rejected with error code 400 - as expected - BUT the error message is:
>  
> Bad API request: simple{${exception.message}}
>
> Shouldn't exceptionMessage() return the text I set in
> MyRequiredHeaderProcessor?



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to