クラスパスから単一のファイルを一度読み取るようにフローを構成する簡単な方法はありますか?ファイルをポーリングする必要はありません。既知のファイルを読み取り、その内容をメッセージペイロードとして設定する必要があります。
使用 set-payload
メッセージプロセッサとMEL式:
<set-payload value="#[Thread.currentThread().getContextClassLoader().getResourceAsStream('my-file.abc')]" />
何らかの理由で、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ステートメントが頻繁に実行される場合、これによりパフォーマンスが向上する可能性があります。
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
最もクリーンなソリューションは、 MUnitドキュメント で説明されているように、専用のgetResource()
メソッドを使用しているようです。
<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>
ファイルを「インポート」しようとする「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()
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();
}
<parse-template location="my-resurce.txt" doc:name="Load resource as a String"/>
ファイルにはMEL式を完全に含めることはできません。その場合、実際にはそのままロードされ、ペイロードになります。