Я создал поток 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"/>
Метод 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?




Доступ к переменным Mule можно получить с помощью методов setProperty/getProperty из класса МулеСообщение.
Экземпляр MuleMessage можно получить из MuleEventContext с помощью getMessage метода. Сам контекст события вводится путем реализации метода onCall интерфейса Вызываемый.
Итак, начните с реализации интерфейса Callable в вашем bean-компоненте.
Оберните вызов в обогатителе. Таким образом, результат попадет в целевую переменную и не перезапишет полезную нагрузку. Это также будет отделять вашу java от внутренних компонентов мула:
<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 Может иметь только один процессор, поэтому в любое время, когда что-то еще нужно, оборачивайте в цепочку процессоров или поток и используйте ссылку на поток.