验证后未在分离器中找到处理器。
No processor found in splitter after validation.
我有一个 Camel 路由需要从 FTP 接收一个 XML 文件作为流,验证它并拆分它。
一直到验证,一切都很好,但是拆分并没有按预期进行。调试的时候,我发现当原始消息是一个流时,split进程没有找到任何处理器。对我来说它看起来很像一个错误。
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,但仍然出现相同的错误。
我不知道验证器是如何工作的,但如果正在更改消息 body,请尝试将其存储为 header 或 属性,例如:.setHeader("headerName",simple("${body}"))
和验证器之后 .setBody(simple("${header.headerName}"))
问题是我试图传递一个流的主体。 (流下载=真)。验证器将读取流并验证内容。没问题。
但是当split到达的时候,问题就来了,stream已经被读取并关闭了。所以拆分不能对流做任何事情。
我已经在没有流的情况下解决了这个问题,但我想如果需要流,使用流缓存也可以。
我有一个 Camel 路由需要从 FTP 接收一个 XML 文件作为流,验证它并拆分它。
一直到验证,一切都很好,但是拆分并没有按预期进行。调试的时候,我发现当原始消息是一个流时,split进程没有找到任何处理器。对我来说它看起来很像一个错误。
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,但仍然出现相同的错误。
我不知道验证器是如何工作的,但如果正在更改消息 body,请尝试将其存储为 header 或 属性,例如:.setHeader("headerName",simple("${body}"))
和验证器之后 .setBody(simple("${header.headerName}"))
问题是我试图传递一个流的主体。 (流下载=真)。验证器将读取流并验证内容。没问题。
但是当split到达的时候,问题就来了,stream已经被读取并关闭了。所以拆分不能对流做任何事情。
我已经在没有流的情况下解决了这个问题,但我想如果需要流,使用流缓存也可以。