Search code examples
apache-camelspring-camel

Camel Processor not setting headers


I am not able to inject/modify headers in a processor using the below spring DSL config. Could you please help in figuring out what I am doing wrong?

    <routeContext xmlns="http://camel.apache.org/schema/spring"
    id="routes1">

    <route id="sdPoll" de:name="Polling"
        de:systemName="Polling" streamCache="true">
        <from uri="timer://sdPoll?fixedRate=true&amp;period=60000" />
        <process ref="refProcessor" />
        <to uri="http://dummyhost" />
        <to uri="log:DEBUG?showBody=true&amp;showHeaders=true" />
    </route>
</routeContext>
<bean id="refProcessor"
    class="com.abc.de.RefProcessor" />

Processor class

public class RefProcessor implements Processor {

private final Logger log = Logger.getLogger(RefProcessor.class);

@SuppressWarnings("unchecked")
@Override
public void process(Exchange exchange) throws Exception {

    exchange.getIn().setHeader("Authorization", "TODO");
    exchange.getIn().setHeader("CamelHttpMethod", "POST");
    exchange.getIn().setHeader("CamelHttpUri", "http://localhost:8280/api/check");
    exchange.getIn().setHeader("Content-Type", "application/json");
    exchange.getIn().setHeader("Accept", "application/json");
    exchange.getIn().setBody("TODO");

    //exchange.getOut().setHeaders(exchange.getIn().getHeaders());
    //exchange.getOut().setHeader("Authorization", "TODO");
    //exchange.getOut().setBody("TODO");
 }
}

Logs- Message History RouteId ProcessorId Processor Elapsed (ms) [sdPoll] [sdPoll] [timer://sdPoll?fixedRate=true&period=60000 ] [ 21176] [null] [onCompletion1 ] [onCompletion ] [ 106] [sdPoll] [process7 ] [ref:refProcessor ] [ 21067] [null] [process3 ] [ref:GenericErrorHandle ] [ 21016]

Exchange[ Id ID-ABC-63143-1516034486954-0-2 ExchangePattern InOnly Headers {breadcrumbId=ID-ABC-63143-1516034486954-0-1, CamelRedelivered=false, CamelRedeliveryCounter=0, firedTime=Mon Jan 15 11:41:31 EST 2018} BodyType null Body [Body is null] ]

Java DSL seem to work though! So what is wrong with my Spring DSL config

static RouteBuilder createRouteBuilder3() {
    return new RouteBuilder() {
        public void configure() {
            from("timer://timer1?period=60000").process(new Processor() {
                public void process(Exchange exchange) throws UnsupportedEncodingException {
                    exchange.getIn().setHeader("CamelHttpMethod", "POST");
                    exchange.getIn().setHeader("Content-Type", "application/json");
                    exchange.getIn().setHeader("Accept", "application/json");
                    exchange.getIn().setHeader("CamelHttpUri",
                            "http://localhost:8280/api/check");
                    exchange.getIn().setHeader("Authorization", "TODO");

                    exchange.getIn().setBody("TODO");
                }
            }).to("http://dummyhost").to("log:DEBUG?showBody=true&showHeaders=true");
        }
    };
}

Message History RouteId ProcessorId Processor Elapsed (ms) [route1 ] [route1 ] [timer://timer1?period=60000 ] [ 86] [route1 ] [process1 ] [RefProcessorCamel$3$1@258e2e41 ] [ 6] [route1 ] [to1 ] [http://dummyhost ] [ 76]

Exchange[ Id ID-ABC-63940-1516036107063-0-2 ExchangePattern InOnly Headers {Accept=application/json, Authorization=TODO, breadcrumbId=ID-ABC-63994-1516036220042-0-1, CamelHttpMethod=POST, CamelHttpUri=http://localhost:8280/api/check, CamelRedelivered=false, CamelRedeliveryCounter=0, Content-Type=application/json, firedTime=Mon Jan 15 12:10:21 EST 2018} BodyType String Body TODO ]


Solution

  • Your Processor looks ok.

    Just a wild guess, but do you use routeContext in your XML configuration intentionally? If not, can you try to switch to camelContext?

    See http://people.apache.org/~dkulp/camel/configuring-camel.html for the difference between routeContext and camelContext