【问题标题】:Camel Processor not setting headers骆驼处理器未设置标题
【发布时间】:2018-01-15 17:56:37
【问题描述】:

我无法使用以下 spring DSL 配置在处理器中注入/修改标头。你能帮忙弄清楚我做错了什么吗?

    <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" />

处理器类

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");
 }
}

日志- 消息历史 RouteId ProcessorId 处理器已用(毫秒) [sdPoll] [sdPoll] [timer://sdPoll?fixedRate=true&period=60000] [21176] [空] [onCompletion1] [onCompletion] [106] [sdPoll] [process7] [ref:refProcessor] [21067] [null] [process3] [ref:GenericErrorHandle] [21016]

交换[ 编号 ID-ABC-63143-1516034486954-0-2 仅交换模式 标题 {breadcrumbId=ID-ABC-63143-1516034486954-0-1, CamelRedelivered=false, CamelRedeliveryCounter=0,firedTime=Mon Jan 15 11:41:31 EST 2018} 体型空 正文 [正文为空] ]

Java DSL 似乎可以工作!那么我的 Spring DSL 配置有什么问题

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");
        }
    };
}

消息历史 RouteId ProcessorId 处理器已用(毫秒) [route1] [route1] [timer://timer1?period=60000] [86] [route1] [process1] [RefProcessorCamel$3$1@258e2e41] [6] [route1] [to1] [http://dummyhost] [76]

交换[ 编号 ID-ABC-63940-1516036107063-0-2 仅交换模式 标头 {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 =应用程序/json,firedTime=2018 年 1 月 15 日星期一 12:10:21 EST } 正文类型字符串 正文 TODO ]

【问题讨论】:

  • 您是否将您的处理器声明为 spring bean? &lt;bean id="myProcessor" class="com.acme.MyProcessor"/&gt;

标签: apache-camel spring-camel


【解决方案1】:

您的处理器看起来不错。

只是一个疯狂的猜测,但您是否有意在 XML 配置中使用 routeContext?如果没有,你可以尝试切换到camelContext吗?

请参阅http://people.apache.org/~dkulp/camel/configuring-camel.html 了解routeContextcamelContext 之间的区别

【讨论】:

    猜你喜欢
    • 2022-10-08
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2015-04-19
    相关资源
    最近更新 更多