0

我有一个 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,但仍然出现相同的错误。

4

2 回答 2

1

我不知道验证器是如何工作的,但是如果正在更改消息正文,请尝试将其存储为标头或属性,例如:.setHeader("headerName",simple("${body}"))在验证器之后.setBody(simple("${header.headerName}"))

于 2015-08-06T11:53:37.223 回答
0

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

但是当拆分到达时,问题就来了,流已经被读取并关闭了。所以拆分不能对流做任何事情。

我已经在没有流的情况下解决了这个问题,但我想如果需要流,使用流缓存也可以。

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

于 2015-09-01T15:43:54.143 回答