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

mule在流期间从类路径读取单个文件,mule,Mule,有没有一种简单的方法来配置一个流,以便一次从类路径读取一个文件?我不需要为文件投票。我只需要读取一个已知文件并将其内容设置为消息负载 使用设置有效负载消息处理器和MEL表达式: <set-payload value="#[Thread.currentThread().getContextClassLoader().getResourceAsStream('my-file.abc')]" /> 由于某些原因,我无法使David Dossot提出的解决方案发挥作用。我受到启发,想出了另

有没有一种简单的方法来配置一个流,以便一次从类路径读取一个文件?我不需要为文件投票。我只需要读取一个已知文件并将其内容设置为消息负载

使用
设置有效负载
消息处理器和MEL表达式:

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

由于某些原因,我无法使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>

然后,您可以通过以下方式使用设置有效负载

<set-payload value="#[app.registry.myResource]" doc:name="Set Payload"/>

这将导致使用文件内容作为字符串设置有效负载

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


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


文件可以完全不包含任何MEL表达式,在这种情况下,它实际上是按原样加载的,并成为有效负载。

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

<parse-template location="my-resurce.txt" doc:name="Load resource as a String"/>

这将使事情变得容易得多

根据模板的使用方式,您可能仍需要设置mime类型

常见错误包括在转换器中使用完整路径,如c:\users\myusers\mule\myfile.txt 这不会很好地编译

例如,您还可以在解析模板和富文本中使用Mule表达式


我正在尝试抛出Java类转换器,以便您可以使用以下命令

注意:路径是包含所需文件的直接包 要读取am,请将路径存储在mule变量中,然后读取文件 内容并将其值存储到有效负载中

您可以创建一个“Springbean”,尝试“导入”该文件(假设MuleXML配置文件)。示例代码如下:

<spring:beans>
 <spring:import resource="classpath:sample-mule-integration.xml"/>
</spring:beans>

最干净的解决方案似乎是使用专用的
getResource()
方法,如中所述
.

实际上……这似乎将有效负载设置为InputStream。有没有一种简单的方法可以把它变成一个字符串?在它的两侧有一个
对象到字符串的转换器。。。我对大卫·多索的回答也不满意。而且,这个答案更清晰,可读性更强。这应该是公认的答案。
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();
}
<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"/>
 File file = new File("C://Users//schiraboina//Desktop//123.txt")
payload=file.getText()