从Java方法访问Mule flowVars/变量

从Java方法访问Mule flowVars/变量,java,mule,Java,Mule,我已经创建了一个Mule流,它决定是否通过SFTP下载一组文件,只要它们都存在 我使用一种Java方法来确定这一点,该方法读取文件夹的内容,然后返回true或false Mule流的结构如下所示: <spring:beans> <spring:bean class="com.test.FileCheck" name="invokeFileChecks"> </spring:bean> </spring:beans> <flow

我已经创建了一个Mule流,它决定是否通过SFTP下载一组文件,只要它们都存在

我使用一种Java方法来确定这一点,该方法读取文件夹的内容,然后返回
true
false

Mule流的结构如下所示:

<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"/> 
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;
}

如何分配
allfilepresent
filepresenttrueorfalse的值?

可以通过类中的
setProperty
/
getProperty
方法访问Mule变量

可以通过
getMessage
方法从
MuleEventContext
获取
MuleMessage
的实例。事件上下文本身是通过实现接口的方法
onCall
注入的


因此,首先在bean中实现
可调用接口。

可以通过类中的
setProperty
/
getProperty
方法访问Mule变量

可以通过
getMessage
方法从
MuleEventContext
获取
MuleMessage
的实例。事件上下文本身是通过实现接口的方法
onCall
注入的


因此,首先在bean中实现
可调用的
接口。

将调用包装在enricher中。这样,结果将转到目标var,而不会覆盖有效负载。它还将使您的java与mule内部保持解耦:

<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只能有一个处理器,因此任何时候需要的其他东西都可以包装在处理器链或流中,并使用flow-ref。

将调用包装在Enricher中。这样,结果将转到目标var,而不会覆盖有效负载。它还将使您的java与mule内部保持解耦:

<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只能有一个处理器,所以任何时候需要的其他东西都可以包装在处理器链或流中,并使用flow-ref