mule在流程期间从类路径读取单个文件

Jef*_*eff 15 mule

是否有一种简单的方法可以将Flow配置为从类路径中读取单个文件一次?我不需要轮询文件.我只需要读取一个已知文件并将其内容设置为消息有效负载.

Dav*_*sot 23

使用set-payload消息处理器和MEL表达式:

<set-payload value="#[Thread.currentThread().getContextClassLoader().getResourceAsStream('my-file.abc')]" />
Run Code Online (Sandbox Code Playgroud)

  • 我也能做到这一点... <set-payload value ="#[groovy:Thread.currentThread().getContextClassLoader().getResourceAsStream('placeidcheckin.xml').text]"/> (6认同)
  • 侧面是一个"对象 - 串 - 变换器". (4认同)
  • 实际上......这似乎将有效负载设置为InputStream.有没有简单的方法使它成为一个字符串? (2认同)

小智 7

出于某种原因,我不能让David Dossot提出的解决方案起作用.我从这个答案中获得灵感,并提出了另一种解决方案

<spring:bean id="myResource" class="org.apache.commons.io.IOUtils" factory-method="toString">
    <spring:constructor-arg value="classpath:path/to/myResource.txt" type="java.io.InputStream"/>
</spring:bean>
Run Code Online (Sandbox Code Playgroud)

然后你可以用以下方式使用set-payload

<set-payload value="#[app.registry.myResource]" doc:name="Set Payload"/>
Run Code Online (Sandbox Code Playgroud)

这将导致使用文件内容将有效负载设置为String.

此方法的优点是资源文件的内容只加载一次String类型的bean.因此,如果频繁执行set-payload语句,则可以提高性能.


小智 6

从Mule 3.4开始,使用解析模板转换器

<parse-template location="my-resurce.txt" doc:name="Load resource as a String"/>
Run Code Online (Sandbox Code Playgroud)

这将使事情变得更加容易.

您可能仍需要设置mime类型,具体取决于您将如何使用模板.

常见错误包括使用变换器中的完整路径,如c:\ users\myusers\mule\myfile.txt这样编译得不好.

您也可以在解析模板和Rich文本中使用Mule Expression.

http://www.mulesoft.org/documentation/display/current/Parse+Template+Reference