Apache camel ApacheCammel执行消息体
我有以下路线:Apache camel ApacheCammel执行消息体,apache-camel,apache-servicemix,Apache Camel,Apache Servicemix,我有以下路线: <route id="import"> <from uri="file:/var/inputfolder?delete=true"/> <log message="Importing ${file:name} started."/> <setProperty pro
<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>
${body}
${file:name}
${file:absolute.path}${header.BrandId.toString.split(“”)[0]}Zip-a擦除
${bodyAs(String)}包含“返回确定”
${exchangeProperty.keepody}
路由检查文件夹/var/inputfolder中的文件。如果找到任何文件,它将执行transfile.php脚本,并在其参数中使用文件名。如果此执行的输出不包含字符串“Return OK”,则标准输出将被放入一个具有原始文件名的文件中/var/rejected文件夹。
但我想指出的是,在/var/rejected文件夹中,将显示包含原始内容的文件,而不是包含执行输出的文件。我知道,这是exec组件的正常行为
但是,我如何改变这一点来实现前面提到的功能呢
提前谢谢 您需要将消息正文存储为exchange属性,然后在
exec
之后替换正文
<setProperty propertyName="keepBody">
<simple>${body}</simple>
</setProperty>
${body}
然后再恢复
<setBody>
<simple>${exchangeProperty.keepBody}</simple>
</setBody>
${exchangeProperty.keepody}
请注意,根据您使用的Apache Camel的年限,名称exchangeProperty
可能是较旧的名称,例如属性
。更多信息,请访问:
我们正在考虑在Camel DSL中添加一个推送/弹出功能,以便将来更轻松地实现这一点:感谢您的帮助,但不幸的是,我需要更多的帮助。在我的问题中,我改变了路径,但是我得到了一个包含以下行的异常:由:org.apache.camel.language.simple.types.SimpleIllegalSyntaxException引起:未知函数:exchangeProperty.keepody位于位置0${exchangeProperty.keepody}这里出了什么问题?我使用了apache-servicemix-5.3.0、camel核心(2.13.2)、camel exec(2.13.2)正如回答中所说,如果您使用的是旧版本的Camel,那么您可能需要使用“property”