从Java方法访问Mule flowVars / Variable

时间:2019-02-26 17:59:17

标签: java mule

我创建了一个Mule流,该流决定了是否通过SFTP下载一组文件(如果它们都存在的话)。

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

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的值?

2 个答案:

答案 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只能拥有一个处理器,因此,在该处理器中任何其他需要的东西都可以包裹在处理器链或流中,并使用流引用。