我创建了一个Mule流,该流决定了是否通过SFTP下载一组文件(如果它们都存在的话)。
我使用Java方法确定这一点,该方法将读取文件夹的内容,然后返回true
或false
。
M子流的结构如下:
<spring:beans>
<spring:bean class="com.test.FileCheck" name="invokeFileChecks">
</spring:bean>
</spring:beans>
<flow name="check-files" processingStrategy="synchronous">
<set-variable variableName="allFilesPresent" value="False" doc:name="Variable - all files present boolean"/>
<invoke object-ref="invokeFileChecks"
method="checkFiles"
doc:name="Invoke folder scan"
methodArguments="#[flowVars.sftpHost], #[flowVars.sftpPort], #[flowVars.sftpUserName], #[flowVars.sftpPassword], #[flowVars.sftpRequestedFiles]"/>
<echo-component doc:name="Echo"/>
Java方法如下:
public boolean checkFiles(String hostname, int port, String username, String password, String fileList){
boolean filesPresentTrueOrFalse;
//logic to list folder contents of SFTP:
//If all files are present, return true, otherwise false.
return filesPresentTrueOrFalse;
}
如何为allFilesPresent
分配filesPresentTrueOrFalse
的值?
答案 0 :(得分:0)
可以通过MuleMessage类中的setProperty
/ getProperty
方法访问M变量。
可以通过MuleMessage
方法从MuleEventContext
获得getMessage
的实例。事件上下文本身是通过实现Callable接口的方法onCall
注入的。
因此,首先在bean中实现Callable
接口。
答案 1 :(得分:0)
将调用包装在扩充器中。这样,结果将到达目标var而不覆盖有效负载。还将使您的Java与m子内部组件脱钩:
<enricher target="#[flowVars.allFilesPresent]">
<invoke object-ref="invokeFileChecks"
method="checkFiles"
doc:name="Invoke folder scan"
methodArguments="#[flowVars.sftpHost], #[flowVars.sftpPort], #[flowVars.sftpUserName], #[flowVars.sftpPassword], #[flowVars.sftpRequestedFiles]"/>
</enricher>
Enricher只能拥有一个处理器,因此,在该处理器中任何其他需要的东西都可以包裹在处理器链或流中,并使用流引用。