是否有一种简单的方法可以将Flow配置为从类路径中读取单个文件一次?我不需要轮询文件。我只需要读取一个已知文件并将其内容设置为消息有效负载。
答案 0 :(得分:23)
使用set-payload
消息处理器和MEL表达式:
<set-payload value="#[Thread.currentThread().getContextClassLoader().getResourceAsStream('my-file.abc')]" />
答案 1 :(得分:7)
出于某种原因,我不能让David Dossot提出的解决方案起作用。我受到了this answer的启发,并提出了另一种解决方案
<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>
然后您可以按以下方式使用set-payload
<set-payload value="#[app.registry.myResource]" doc:name="Set Payload"/>
将导致使用文件内容将有效负载设置为String。
此方法的优点是资源文件的内容只加载一次String类型的bean。因此,如果频繁执行set-payload语句,则可以提高性能。
答案 2 :(得分:6)
从Mule 3.4开始,使用解析模板转换器
<parse-template location="my-resurce.txt" doc:name="Load resource as a String"/>
这将使事情变得更加容易。
您可能仍需要设置mime类型,具体取决于您将如何使用模板。
常见错误包括使用变换器中的完整路径,如c:\ users \ myusers \ mule \ myfile.txt 这不会很好地编译。
您也可以在解析模板和Rich文本中使用Mule Expression。
http://www.mulesoft.org/documentation/display/current/Parse+Template+Reference
答案 3 :(得分:1)
最干净的解决方案似乎是使用了专用的getResource()
方法
MUnit documentation
答案 4 :(得分:0)
<scripting:component doc:name="Get xls File">
<scripting:script engine="Groovy"><![CDATA[new File('C:/project/src/main/resources/account.xls').getText('UTF-8')]]></scripting:script>
</scripting:component>
答案 5 :(得分:0)
<parse-template location="my-resurce.txt" doc:name="Load resource as a String"/>
该文件完全不包含任何MEL表达式,在这种情况下,它实际上是按原样加载的,并且它成为有效载荷。
答案 6 :(得分:0)
我正在尝试抛出Java类转换器,以便您可以使用以下
注意:路径是包含所需文件的直接包 读取am存储mule变量内的路径,然后读取文件 内容并将其值存入Payload
public class PayloadFileReader extends AbstractMessageTransformer {
public Object transformMessage(MuleMessage message, String outputEncoding)
throws TransformerException {
String result = "";
try {
result = readFileTest(message.getInvocationProperty("path")
.toString());
} catch (Exception e) {
e.printStackTrace();
}
message.setPayload(result);
return message;
}
public String readFileTest(String path) throws FileNotFoundException,
IOException, Exception {
ClassLoader classLoader = getClass().getClassLoader();
"+classLoader.getResource("samples/v3/addVal-request.sample").getFile());
File file = new File(classLoader.getResource(path).getFile());
FileReader fileReader = new FileReader(file);
BufferedReader bufferReader = null;
StringBuilder stringBuffer = new StringBuilder();
String line;
try {
bufferReader = new BufferedReader(fileReader);
while ((line = bufferReader.readLine()) != null) {
stringBuffer.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferReader != null) {
try {
bufferReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return stringBuffer.toString();
}
答案 7 :(得分:0)
您可以创建一个“Spring Bean”,尝试“导入”该文件(假设Mule XML配置文件)。示例代码如下:
<spring:beans>
<spring:import resource="classpath:sample-mule-integration.xml"/>
</spring:beans>
或者您可以尝试将文件放在属性占位符中,如下所示
<context:property-placeholder location="file:E:\NewMuleWorkSpace\springbeanproperties\src\main\resources\property.properties"/>
或者你甚至可以使用带有示例代码的Groovy组件来读取文件:
File file = new File("C://Users//schiraboina//Desktop//123.txt")
payload=file.getText()