验证后在拆分器中找不到处理器。

时间:2015-08-05 17:11:20

标签: java apache-camel camel-ftp

我有一个Camel路由需要从FTP接收XML文件作为流,验证并拆分它。

在验证过程中一切正常,但分割并没有按预期工作。在调试时,我发现当原始消息是流时,拆分过程找不到任何处理器。它看起来非常像我的错误。

     from("direct:start")
    .pollEnrich("ftp://user@host:21?fileName=file.xml&streamDownload=true&password=xxxx&fastExistsCheck=true&soTimeout=300000&disconnect=true")
    .to("validator:myXsd.xsd")
    .split().tokenizeXML("myTag")
    .to(to)
    .end();

在这种情况下,我可以看到Exchange进入拆分器,但没有找到处理器,拆分什么也没做。如果我删除验证,行为会有所不同:

     from("direct:start")
    .pollEnrich("ftp://user@host:21?fileName=file.xml&streamDownload=true&password=xxxx&fastExistsCheck=true&soTimeout=300000&disconnect=true")
    .split().tokenizeXML("myTag")
    .to(to)
    .end();

在这种情况下,分离器工作正常。

此外,如果XML文件不是来自流,那么一切都很好。

   from("file:file.xml")
    .to("validator:myXsd.xsd")
    .split().tokenizeXML("myTag")
    .to(to)
    .end();

我将我的Camel版本更新为2.15.2,但仍然会出现同样的错误。

2 个答案:

答案 0 :(得分:1)

我不知道验证器是如何工作的,但如果要更改邮件正文,请尝试将其存储为标题或属性,例如:.setHeader("headerName",simple("${body}"))和验证程序.setBody(simple("${header.headerName}"))

之后

答案 1 :(得分:0)

我试图传递一个流体的问题。 (streamDownload =真)。验证器将读取流并验证内容。没问题。

但问题出现在分裂到来时,流已经被读取和关闭。因此拆分不能对流做任何事情。

我已经在没有流的情况下解决了这个问题,但我想如果需要一个流,那么使用流式缓存也会有效。

请参阅http://camel.apache.org/why-is-my-message-body-empty.html