为什么setHeader在进程函数中不起作用但不起作用

时间:2017-02-13 15:06:18

标签: java apache-camel

我有一个小型的camel项目,我从文件系统中读取文件并在我的路线中处理它们。 在我设置的过程功能中

exchange.getOut().setHeader("tc.GIARO.item.ids",simple("TC00000021"));

然后.to()函数无效。 但是当我把这个设置在像

这样的过程函数之外时
.setHeader("tc.GIARO.item.ids", simple("TC00000021"))

.to()函数识别此标题并起作用。

如果i .log()直接在.process()或.setHeader()函数之后,它会以两种方式注销..

有人知道为什么会这样吗?

修改

@Override
public void configure() throws Exception {

    from("file://" + path + "?preMove=inprogress&move=.done")

            .process(new Processor() {
                @Override
                public void process(Exchange exchange) throws Exception {
                    String myFilename = (String) exchange.getIn().getHeader("CamelFileNameOnly");
                    String[] tcid = myFilename.split("-");

                    String filename = (String) exchange.getIn().getHeader("CamelFilePath");
                    String content = new String(Files.readAllBytes(Paths.get(filename)));

                    exchange.getOut().setBody(content, String.class);
                    exchange.getOut().setHeader("tc.GIARO.item.ids", simple("TC00000021")); //whether here                      
                }
            })
             .setHeader("tc.GIARO.item.ids", simple("TC00000021")) // or whether here
             .log("${header.tc.GIARO.item.ids}")
             .to("tc://" + ip + "/tc?tcMethod=getItemAndRelatedObjects&tcUser=" + user + "&tcPass=" + pass
                    + "&tcSessionKey=1");
}

1 个答案:

答案 0 :(得分:1)

您必须在In消息中设置setHeader(而不是Out消息)。 不要创建新消息(使用exchange.getOut().setSomething

@Override
public void configure() throws Exception {

    from("file://" + path + "?preMove=inprogress&move=.done")

            .process(new Processor() {
                @Override
                public void process(Exchange exchange) throws Exception {
                    String myFilename = (String) exchange.getIn().getHeader("CamelFileNameOnly");
                    String[] tcid = myFilename.split("-");

                    String filename = (String) exchange.getIn().getHeader("CamelFilePath");
                    String content = new String(Files.readAllBytes(Paths.get(filename)));

                    exchange.getIn().setBody(content, String.class);
                    exchange.getIn().setHeader("tc.GIARO.item.ids", simple("TC00000021")); //whether here                      
                }
            })
             .setHeader("tc.GIARO.item.ids", simple("TC00000021")) // or whether here
             .log("${header.tc.GIARO.item.ids}")
             .to("tc://" + ip + "/tc?tcMethod=getItemAndRelatedObjects&tcUser=" + user + "&tcPass=" + pass
                    + "&tcSessionKey=1");
}