Hi

I have experienced a weird behavior in Camel 4.4.0 in Quarkus where the 
Exception handling is not executing as expected when using a toV().

In my code sample below everything starts with a rest call.
If this rest call finish without errors then the original message should be 
returned.
If an error is thrown, then an error message should be returned.

But if I call an endpoint using the .toV(), the error is processed as expected 
BUT NOT returned. It seems like something is messing with the unit of work or 
whatever…

> from(direct("start"))
> .setBody(constant(List.of("A","B")))
> .to(direct("line"));// .toV(direct("line").getUri(), "mySend", "myReceive");

By commenting out the .to() and removing the comment on .toV() the problem 
occurs.

This is a simulation so the incoming rest post payload is NOT returned (just 
POST a JSON), however the body of the "start" endpoint should be returned if 
everything work, but an error message should be returned if an error is thrown.
This is not happening if the .toV() is used. Then the body of the "start" 
endpoint is returned.

Might this be a bug or have I messed something up?

I really like the Variables now, to send to an endpoint and be certain the 
original body is untouched without the hazzle of storing/restoring logic…

/M

> public class TestRouter extends EndpointRouteBuilder {@Override
> public void configure() throws Exception 
> {onException(IllegalAccessException.class).routeId("Exceptions").maximumRedeliveries(0).handled(true).removeHeaders("*").process(new
>  
> JsonResponseProcessor()).to(log("Exceptions").level("WARN").showBody(false).showBodyType(false).showHeaders(true).multiline(true)).to(direct("reply"));
>
> restConfiguration().bindingMode(RestBindingMode.json).dataFormatProperty("prettyPrint",
>  "true").component("servlet").apiProperty("cors", "true");
>
> rest().post("/test").id("REST-workOrder-POST").consumes("application/json").produces("application/json").outType(ResponseMessage.class).to(direct("start").getUri());
>
> from(direct("start")).setBody(constant(List.of("A", 
> "B"))).to(direct("line"));// .toV(direct("line").getUri(), "mySend", 
> "myReceive");
>
> from("direct:line").to("log:line").process(new MyProcessor()).to("mock:line");
>
> from(direct("reply")).routeId("createResponse").description("Creates a 
> unified 
> response").to(log("DIRECT_REPLY").showBody(true).showVariables(true).showBodyType(true).showHeaders(true).multiline(true)).end();}
>
> private class MyProcessor implements org.apache.camel.Processor {@Override
> public void process(final Exchange exchange) throws Exception 
> {log.info(exchange.getIn().getBody(String.class));throw new 
> IllegalAccessException("Error occurred");
> }}
>
> private class JsonResponseProcessor implements Processor {@Override
> public void process(final Exchange exchange) {
>
> Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, 
> Exception.class);ResponseMessage message = new ResponseMessage();
>
> final Message in = exchange.getIn();if (cause != null) {String responseCode = 
> in.getHeader(Exchange.HTTP_RESPONSE_CODE, String.class);
>
> String reason = "Unspecific Error";String errorString = 
> cause.getMessage();String statusCode = "1000";
>
> in.setHeader(Exchange.HTTP_RESPONSE_CODE, 
> HttpResponseStatus.INTERNAL_SERVER_ERROR);message.setError(NumberUtils.toInt(statusCode,
>  1000),String.format("ERROR message = %s(%s)", reason, errorString));
>
> }in.setBody(message);
> }}}
>
> ---------------------------------------------------------------
>
> Capgemini is a trading name used by the Capgemini Group of companies which 
> includes Capgemini Sverige AB, a company registered in Sweden (number 
> 556092-3053) whose registered office is at FLEMINGGATAN 18 BOX 12054 S-102 22 
> Stockholm, Sweden. This message contains information that may be privileged 
> or confidential and is the property of the Capgemini Group. It is intended 
> only for the person to whom it is addressed. If you are not the intended 
> recipient, you are not authorized to read, print, retain, copy, disseminate, 
> distribute, or use this message or any part thereof. If you receive this 
> message in error, please notify the sender immediately and delete all copies 
> of this message.

Attachment: smime.p7s
Description: S/MIME cryptographic signature

******This mail has been sent from an external source. Do not reply to it, or 
open any links/attachments unless you are sure of the sender's identity.******

Reply via email to