apache-camel - Apache Camel exec 消息正文

标签 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”,则标准输出将放入文件夹/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 添加推送/弹出功能,以便将来更容易实现:https://issues.apache.org/jira/browse/CAMEL-8958

关于apache-camel - Apache Camel exec 消息正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31381783/

相关文章:

java - JBoss Fuse,使用 ActiveMQ 创建容器

java - Servicemix 找不到 javax.validation 包

java - 使用 Apache Camel 发送 POST 请求

java - Camel CXF 端点不返回 POJO

java - 对于 Camel 路由输入端点的 JBoss 嵌入式 MQ 进行 jndi 查找时出现问题

java - Spring 集成 : TCP Client/Server opening one client connection per server connection

java - 在OSGI中导入包

wso2 - esb 解决方案、servicemix 还是 wso2?

java - 基于特定条件的 Camel 条件路由

java - 在 Apache ServiceMix 中为 war 启用 CORS