繁体   English   中英

从Java方法访问Mule flowVars / Variable

[英]Accessing Mule flowVars/Variable from a Java method

我创建了一个Mule流,该流决定了是否通过SFTP下载一组文件,前提是它们都存在。

我使用Java方法确定此内容,该方法读取文件夹的内容,然后返回truefalse

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

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

如何为filesPresentTrueOrFalse分配allFilesPresent的值?

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

的一个实例MuleMessage可获自MuleEventContext经由getMessage方法。 通过实现Callable接口的onCall方法可以注入事件上下文本身。

因此,从在bean中实现Callable接口开始。

将调用包装在扩充器中。 这样,结果将到达目标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只能有一个处理器,因此随时可以将处理器链或流中的其他内容包装起来并使用流引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM