web-dev-qa-db-ja.com

ラバはフロー中にクラスパスから単一のファイルを読み取りました

クラスパスから単一のファイルを一度読み取るようにフローを構成する簡単な方法はありますか?ファイルをポーリングする必要はありません。既知のファイルを読み取り、その内容をメッセージペイロードとして設定する必要があります。

15
Jeff

使用 set-payloadメッセージプロセッサとMEL式:

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

何らかの理由で、DavidDossotによって提案されたソリューションを機能させることができません。私は この答え に触発され、別の解決策を思いついた

<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型のBeanに一度だけロードされるという利点があります。したがって、set-payloadステートメントが頻繁に実行される場合、これによりパフォーマンスが向上する可能性があります。

7
Guido

Mule 3.4以降、解析テンプレートトランスフォーマーを使用します

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

これにより、作業が非常に簡単になります。

テンプレートの使用方法によっては、mime-typeを設定する必要がある場合があります。

一般的なエラーには、c:\ users\myusers\mule\myfile.txtのようなトランスフォーマーでのフルパスの使用が含まれます。これはうまくコンパイルされません。

たとえば、解析テンプレートやリッチテキストでミュール式を使用することもできます。

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

6

最もクリーンなソリューションは、 MUnitドキュメント で説明されているように、専用のgetResource()メソッドを使用しているようです。

1
Yuri
    <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>
0
bekur

ファイルを「インポート」しようとする「SpringBean」を作成できます(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()  
0
Sudha Ch

Javaクラストランスフォーマーをスローしようとしているので、次を使用できます

注:パスは、読み取りたいファイルを含む直接パッケージです。パスをmule変数内に格納してから、ファイルの内容を読み取り、その値をペイロードに格納します。

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();
}
0
<parse-template location="my-resurce.txt" doc:name="Load resource as a String"/>

ファイルにはMEL式を完全に含めることはできません。その場合、実際にはそのままロードされ、ペイロードになります。

0
Guido