Apache camel exec 消息正文
Apache camel exec message body
我有以下路线:
<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',标准输出将以原始文件名放入文件夹 /var/rejected 中。
但我想实现的是,在 /var/rejected 文件夹中出现了带有其原始内容的文件,而不是执行的输出。我知道,这是 exec 组件的正常行为
https://camel.apache.org/exec.html
但是我该如何改变它来实现前面提到的呢?
提前致谢!
您需要将消息正文存储为交换属性,然后在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 添加 push/pop 以便将来更容易:https://issues.apache.org/jira/browse/CAMEL-8958
我有以下路线:
<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',标准输出将以原始文件名放入文件夹 /var/rejected 中。 但我想实现的是,在 /var/rejected 文件夹中出现了带有其原始内容的文件,而不是执行的输出。我知道,这是 exec 组件的正常行为
https://camel.apache.org/exec.html
但是我该如何改变它来实现前面提到的呢?
提前致谢!
您需要将消息正文存储为交换属性,然后在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 添加 push/pop 以便将来更容易:https://issues.apache.org/jira/browse/CAMEL-8958