我有以下路线:
<route id="import">
<from uri="file:/var/inputfolder?delete=true"/>
<log message="Importing ${file:name} started."/>
<setProperty propertyName="keepbody">
<simple>${body}</simple>
</setProperty>
<setHeader headerName="BrandId">
<simple>${file:name}</simple>
</setHeader>
<setHeader headerName="CamelExecCommandArgs">
<simple>${file:absolute.path} ${header.BrandId.toString.split("_")[0]} Zip -a erase</simple>
</setHeader>
<to uri="exec://./transfile.php?workingDir=/usr/bin/&args&useStderrOnEmptyStdout=true"/>
<log message="stdout/stderr of /usr/bin/transfile.php:\n ${body}"/>
<choice>
<when>
<simple>${bodyAs(String)} contains 'Return OK'</simple>
<log message="Importing ${file:name} finished."/>
</when>
<otherwise>
<log message="Importing ${file:name} failed."/>
<setBody>
<simple>${exchangeProperty.keepbody}</simple>
</setBody>
<to uri="file:/var/rejected"/>
</otherwise>
</choice>
</route>
路由检查文件夹/ var / inputfolder中的文件。如果找到,则执行transfile.php脚本,并在其参数中使用文件名。如果此执行的输出不包含字符串'Return OK',则stdout将被放入文件名为/ var / rejected的文件中。 但是我想知道,在/ var / rejected文件夹中,文件显示原始内容,而不是执行的输出。我知道,这是exec组件的正常行为
https://camel.apache.org/exec.html
但是如何更改它以实现前面提到的?
提前致谢!
答案 0 :(得分:2)
您需要将邮件正文存储为交换属性,然后在exec
之后替换正文
<setProperty propertyName="keepBody">
<simple>${body}</simple>
</setProperty>
然后将其恢复
<setBody>
<simple>${exchangeProperty.keepBody}</simple>
</setBody>
请注意,根据您使用的Apache Camel的年龄,名称exchangeProperty
可能是较早的名称,例如property
。有关详情,请参阅:http://camel.apache.org/simple
我们正考虑在Camel DSL中添加推/弹,以便将来更轻松:https://issues.apache.org/jira/browse/CAMEL-8958