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