Search code examples
springspring-bootrestapache-camelcamel-rest

Apache camel dynamic routing


I have following Apache camel rest service(/sales) that internally calls another rest service(/getOrders) and get list of objects. Am able to print JSON response in the processor but getting java objects in response while trying from postman. Could anyone pls help me to resolve the issue. Attaching the response log for ref..

@Component
public class ApplicationResource extends RouteBuilder {

    @Autowired
    private OrderService service;

    @BeanInject
    private OrderProcessor processor;

    @Override
    public void configure() throws Exception {
        restConfiguration().component("servlet").port(9090).host("localhost");

        rest().get("/getOrders").produces(MediaType.APPLICATION_JSON_VALUE).route().setBody(() -> service.getOrders());


        rest().get("/sales").produces(MediaType.APPLICATION_JSON_VALUE).route()
                .setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
                .toD("http://localhost:9090/getOrders?bridgeEndpoint=true").convertBodyTo(String.class).marshal()
                .json(JsonLibrary.Jackson, Order.class).to("log:foo?showHeaders=true");;
        ;

    }

}

enter image description here


Solution

  • Solvedddd !!! i did two things as follows,May be use full for some one
    

    1,bindingMode(RestBindingMode.auto) - RestBindingMode changes to auto from json
    2, Added this in the main service(/getOrders).marshal().json(JsonLibrary.Jackson);

    @Component
    public class ApplicationResource extends RouteBuilder {
    
        @Autowired
        private OrderService service;
    
        @BeanInject
        private OrderProcessor processor;
    
        @Override
        public void configure() throws Exception {
            restConfiguration().component("servlet").port(9090).host("localhost").bindingMode(RestBindingMode.auto);
    
            rest().get("/getOrders").produces(MediaType.APPLICATION_JSON_VALUE).route().setBody(() -> service.getOrders())
                    .marshal().json(JsonLibrary.Jackson);
    
            rest().get("/sales").produces(MediaType.APPLICATION_JSON_VALUE).route()
                    .setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
                    .toD("http://localhost:9090/getOrders?bridgeEndpoint=true").convertBodyTo(String.class)
                    .log("body = ${body}");
            ;
            ;
    
        }
    
    }