Here's a repo to use

https://github.com/hakuseki/code-with-quarkus




/M


On Wednesday, March 20th, 2024 at 22:17, Claus Ibsen <claus.ib...@gmail.com> 
wrote:

> Hi
> 
> Are you able to put together a smaller and simpler example with just routes
> (no rest-dsl) that can let us quicker take a look and better understand
> what is happening?
> 
> 
> On Mon, Mar 18, 2024 at 10:04 AM Mikael Andersson Wigander
> mikael.andersson.wigan...@pm.me.invalid wrote:
> 
> > 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.
> 
> 
> --
> Claus Ibsen
> -----------------
> @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to