Apache camel exec消息体

时间:2015-07-13 11:09:02

标签: apache-camel apache-servicemix

我有以下路线:

            <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/&amp;args&amp;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

但是如何更改它以实现前面提到的?

提前致谢!

1 个答案:

答案 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