* GH-8562: Fix streaming source for remote calls Fixes https://github.com/spring-projects/spring-integration/issues/8562 The `AbstractRemoteFileStreamingMessageSource.doReceive()` takes files first from a `toBeReceived` queue. When `AbstractRemoteFileStreamingMessageSource.remoteFileToMessage()` fails to fetch the file content because of interim connection issue, we reset this file from a filter and rethrow an exception. The next `receive()` call will just go ahead to the next entry in the `toBeReceived` queue, but the file we have just failed for will be retried only on the next list call to the remove directory. This essentially breaks a possible in-order target application logic. * Introduce `AbstractRemoteFileStreamingMessageSource.strictOrder` option to clear the `toBeReceived` queue when we fail in the `remoteFileToMessage()`, so the next `receive()` call would re-fetch files from remote dir, because the filter has been reset for those files. * Fix `AbstractFileInfo.toString()` to not perform remote calls when we just log this file. For example, we reset the file for connection failure and log the message about it, but it fails again because we request `size` of the file which may require a remote connection. **Cherry-pick to `6.0.x` & `5.5.x`** * * Revert `AbstractFileInfo` changes * Override `toString()` in `SmbFileInfo` instead - exactly the place where connection is used to obtain file attributes like `size` or `lastModified`
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 clean test
or
./gradlew clean testAll
The latter runs additional tests (those annotated with @LongRunningIntegrationTest); it is a more thorough test but takes quite a lot longer to run.
The test results are captured in build/reports/tests/test (or .../testAll) under each module (in HTML format).
Add --continue to the command to perform a complete build, even if there are failing tests in some modules; otherwise the build will stop after the current module(s) being built are completed.
NOTE: While Spring Integration runs with Java SE 8 or higher, a Java 11 compiler is required to build the project.
To build and install jars into your local Maven cache:
./gradlew publishToMavenLocal
To build api Javadoc (results will be in build/api):
./gradlew api
To build the reference documentation (results will be in build/docs/asciidoc and build/docs/asciidocPdf):
./gradlew reference
To build complete distribution including -dist, -docs, and -schema zip files (results will be in build/distributions):
./gradlew dist
Using Eclipse or Spring Tool Suite (with BuildShip Plugin)
If you have the BuildShip plugin installed,
File -> Import -> Gradle -> Existing Gradle Project
Using Eclipse or Spring Tool Suite (when the BuildShip Plugin is not installed)
To generate Eclipse metadata (.classpath and .project files, etc), do the following:
./gradlew eclipse
Once complete, you may then import the projects into Eclipse as usual:
File -> Import -> General -> Existing projects into workspace
Browse to the 'spring-integration' root directory. All projects should import free of errors.
Using IntelliJ IDEA
To import the project into IntelliJ IDEA:
File -> Open... -> and select build.gradle from spring-integration project root directory
Guidelines
See also Contributor Guidelines.
Resources
For more information, please visit the Spring Integration website at: https://spring.io/projects/spring-integration