* GH-3554: Eval remote dir on each synchToLocal Fixes https://github.com/spring-projects/spring-integration/issues/3554 The `remoteDirectoryExpression` was introduced into an `AbstractInboundFileSynchronizer` to let end-user to evaluate a remote directory on each poll (essentially on each `synchronizeToLocalDirectory()` call). The fix for the https://jira.spring.io/browse/INT-4491 introduced a regression when such an expression was evaluated only once when we call a `setRemoteDirectory()`. So, an original purpose of this option was lost and we don't get an actual remote dir on each poll * Remove `evaluateRemoteDirectory()` method and its usage since it doesn't reflect expectation of the remote dir expression property * Reinstate the `remoteDirectoryExpression` evaluation in the `synchronizeToLocalDirectory()` * Propagate the result of that expression into further methods for copying files * Remove setting of the `remoteDirectory` variable into a global `EvaluationContext` of the `AbstractInboundFileSynchronizer` instance since it is not thread-safe * Instead create an `EvaluationContext` locally for each `synchronizeToLocalDirectory()` call and set the `remoteDirectory` variable into this scoped instances * Generate a local file name from the `localFilenameGeneratorExpression` against locally created `EvaluationContext` with the mentioned `remoteDirectory` variable * Cover the expected functionality with a unit-test **Cherry-pick to `5.4.x` & `5.3.x`** * * Fix `testRemoteDirectoryRefreshedOnEachSynchronization` according PR review
Spring Integration

Code of Conduct
Please see our Code of conduct.
Reporting Security Vulnerabilities
Please see our Security policy.
Checking out and Building
To check out the project and build from the source, do the following:
git clone git://github.com/spring-projects/spring-integration.git
cd spring-integration
./gradlew build
NOTE: While Spring Integration runs with Java SE 6 or higher, a Java 8 compiler is required to build the project.
If you encounter out of memory errors during the build, increase an available heap and permgen for Gradle:
GRADLE_OPTS='-XX:MaxPermSize=1024m -Xmx1024m'
To build and install jars into your local Maven cache:
./gradlew install
To build api Javadoc (results will be in build/api):
./gradlew api
To build reference documentation (results will be in build/reference):
./gradlew reference
To build complete distribution including -dist, -docs, and -schema zip files (results will be in build/distributions)
./gradlew dist
Using Eclipse
To generate Eclipse metadata (.classpath and .project files), do the following:
./gradlew eclipse
Once complete, you may then import the projects into Eclipse as usual:
File -> Import -> Existing projects into workspace
Browse to the 'spring-integration' root directory. All projects should import free of errors.
Using IntelliJ IDEA
To generate IDEA metadata (.iml and .ipr files), do the following:
./gradlew idea
Resources
For more information, please visit the Spring Integration website at: https://projects.spring.io/spring-integration