diff --git a/build.gradle b/build.gradle
index 493e7f5e2b..47161ac8ef 100644
--- a/build.gradle
+++ b/build.gradle
@@ -11,8 +11,8 @@ buildscript {
}
plugins {
- id 'org.sonarqube' version '2.6.2'
- id 'org.asciidoctor.convert' version '1.5.9.2'
+ id 'org.sonarqube' version '2.7'
+ id 'org.asciidoctor.convert' version '1.5.10'
id 'org.ajoberstar.grgit' version '3.0.0'
}
@@ -88,17 +88,16 @@ subprojects { subproject ->
ext {
activeMqVersion = '5.15.8'
- apacheSshdVersion = '2.1.0'
+ apacheSshdVersion = '2.2.0'
aspectjVersion = '1.9.2'
- assertjVersion = '3.11.1'
+ assertjVersion = '3.12.0'
assertkVersion = '0.13'
boonVersion = '0.34'
commonsDbcp2Version = '2.5.0'
commonsIoVersion = '2.6'
commonsNetVersion = '3.6'
- curatorVersion = '4.0.1'
+ curatorVersion = '4.1.0'
derbyVersion = '10.14.2.0'
- eclipseLinkVersion = '2.7.3'
ftpServerVersion = '1.1.1'
googleJsr305Version = '3.0.2'
groovyVersion = '2.5.6'
@@ -131,7 +130,7 @@ subprojects { subproject ->
postgresVersion = '42.2.5'
reactorNettyVersion = '0.8.5.RELEASE'
reactorVersion = '3.2.6.RELEASE'
- romeToolsVersion = '1.9.0'
+ romeToolsVersion = '1.12.0'
servletApiVersion = '4.0.1'
smackVersion = '4.3.1'
springAmqpVersion = project.hasProperty('springAmqpVersion') ? project.springAmqpVersion : '2.2.0.BUILD-SNAPSHOT'
@@ -295,7 +294,7 @@ subprojects { subproject ->
checkstyle {
configFile = file("$rootDir/src/checkstyle/checkstyle.xml")
- toolVersion = "8.9"
+ toolVersion = "8.17"
}
artifacts {
@@ -535,16 +534,7 @@ project('spring-integration-jpa') {
testCompile "org.hibernate:hibernate-entitymanager:$hibernateVersion"
testRuntime "org.hibernate.javax.persistence:hibernate-jpa-2.1-api:$jpa21ApiVersion"
- testRuntime "org.eclipse.persistence:org.eclipse.persistence.jpa:$eclipseLinkVersion"
- testRuntime "org.springframework:spring-instrument:$springVersion"
}
-
- tasks.withType(Test).matching {it.name ==~ /(test)|(testAll)/}.all {
- jvmArgs classpath.files.findAll {
- it.name ==~ /(spring-instrument.+)/}.collect{"-javaagent:$it"
- }
- }
-
}
project('spring-integration-mail') {
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 29953ea141..87b738cbd0 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index e0b3fb8d70..44e7c4d1d7 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index cccdd3d517..af6708ff22 100755
--- a/gradlew
+++ b/gradlew
@@ -28,7 +28,7 @@ APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
+DEFAULT_JVM_OPTS='"-Xmx64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
diff --git a/gradlew.bat b/gradlew.bat
index e95643d6a2..6d57edc706 100755
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -1,84 +1,84 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/core/EclipseLinkJpaOperationsTests-context.xml b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/core/EclipseLinkJpaOperationsTests-context.xml
deleted file mode 100644
index 2d16167444..0000000000
--- a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/core/EclipseLinkJpaOperationsTests-context.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/core/EclipseLinkJpaOperationsTests.java b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/core/EclipseLinkJpaOperationsTests.java
deleted file mode 100644
index 0bc028130f..0000000000
--- a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/core/EclipseLinkJpaOperationsTests.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.integration.jpa.core;
-
-import static org.junit.Assert.fail;
-
-import java.text.ParseException;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
-/**
- * Tests the functionality of {@link JpaOperations} and {@link DefaultJpaOperations}
- * using the EclipseLink persistence provider.
- *
- * If you want to run these tests from your IDE, please ensure that you execute
- * the tests using a javaagent:
- *
- *
- * {@code
- * -javaagent:/home//.m2/repository/org/springframework/spring-instrument/3.1.1.RELEASE/spring-instrument-3.1.1
- * .RELEASE.jar
- * }
- *
- *
- * @author Gunnar Hillert
- * @author Artem Bilan
- *
- * @since 2.2
- *
- */
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration
-public class EclipseLinkJpaOperationsTests extends AbstractJpaOperationsTests {
-
- @Test
- @Override
- public void testExecuteUpdateWithNativeQuery() {
- try {
- super.testExecuteUpdateWithNativeQuery();
- }
- catch (Exception e) {
- return;
- }
-
- fail("Was expecting an Exception as OpenJPA does not support Native SQL Queries with Named Parameters.");
- }
-
- @Test
- @Override
- public void testExecuteUpdateWithNativeNamedQuery() {
- try {
- super.testExecuteUpdateWithNativeNamedQuery();
- }
- catch (Exception e) {
- return;
- }
-
- fail("Was expecting an Exception as OpenJPA does not support Native SQL Queries with Named Parameters.");
- }
-
- @Test
- @Override
- public void testExecuteUpdate() {
- super.testExecuteUpdate();
- }
-
- @Test
- @Override
- public void testExecuteUpdateWithNamedQuery() {
- super.testExecuteUpdateWithNamedQuery();
- }
-
- @Test
- @Override
- public void testExecuteSelectWithNativeQueryReturningEntityClass()
- throws ParseException {
- super.testExecuteSelectWithNativeQueryReturningEntityClass();
- }
-
- @Test
- @Override
- public void testExecuteSelectWithNativeQuery() throws ParseException {
- super.testExecuteSelectWithNativeQuery();
- }
-
- @Test
- @Override
- public void testMerge() {
- super.testMerge();
- }
-
- @Test
- @Override
- public void testMergeCollection() {
- super.testMergeCollection();
- }
-
- @Test
- @Override
- public void testMergeNullCollection() {
- super.testMergeNullCollection();
- }
-
- @Test
- @Override
- public void testMergeCollectionWithNullElement() {
- super.testMergeCollectionWithNullElement();
- }
-
- @Test
- @Override
- public void testPersist() {
- super.testPersist();
- }
-
- @Test
- @Override
- public void testPersistCollection() {
- super.testPersistCollection();
- }
-
- @Test
- @Override
- public void testPersistNullCollection() {
- super.testPersistNullCollection();
- }
-
- @Test
- @Override
- public void testPersistCollectionWithNullElement() {
- super.testPersistCollectionWithNullElement();
- }
-
- @Test
- @Override
- public void testGetAllStudents() {
- super.testGetAllStudents();
- }
-
- @Test
- @Override
- public void testGetAllStudentsWithMaxResults() {
- super.testGetAllStudentsWithMaxResults();
- }
-
- @Test
- @Override
- public void testDeleteInBatch() {
- super.testDeleteInBatch();
- }
-
- @Test
- @Override
- public void testDelete() {
- super.testDelete();
- }
-
- @Test
- @Override
- public void testDeleteInBatchWithEmptyCollection() {
- super.testDeleteInBatchWithEmptyCollection();
- }
-
-}
diff --git a/src/reference/asciidoc/changes-5.0-5.1.adoc b/src/reference/asciidoc/changes-5.0-5.1.adoc
new file mode 100644
index 0000000000..66d7d8c459
--- /dev/null
+++ b/src/reference/asciidoc/changes-5.0-5.1.adoc
@@ -0,0 +1,240 @@
+[[migration-5.0-5.1]]
+=== Changes between 5.1 and 5.1
+
+[[x5.1-new-components]]
+=== New Components
+
+The following components are new in 5.1:
+
+* <>
+
+[[x5.1-AmqpDedicatedChannelAdvice]]
+==== `AmqpDedicatedChannelAdvice`
+
+See <>.
+
+[[x5.1-Functions]]
+==== Improved Function Support
+
+The `java.util.function` interfaces now have improved integration support in the Framework components.
+Also Kotlin lambdas now can be used for handler and source methods.
+
+See <>.
+
+[[x5.1-LongRunningTest]]
+==== `@LongRunningTest`
+
+A JUnit 5 `@LongRunningTest` conditional annotation is provided to check the environment or system properties for the `RUN_LONG_INTEGRATION_TESTS` entry with the value of `true` to determine if test should be run or skipped.
+
+See <>.
+
+[[x5.1-general]]
+=== General Changes
+
+The following changes have been made in version 5.1:
+
+* <>
+* <>
+* <>
+* <>
+* <>
+* <>
+* <>
+* <>
+* <>
+* <>
+
+[[x5.1-java-dsl]]
+==== Java DSL
+
+The `IntegrationFlowContext` is now an interface and `IntegrationFlowRegistration` is an inner interface of `IntegrationFlowContext`.
+
+A new `logAndReply()` operator has been introduced for convenience when you wish to log at the end of a flow for request-reply configurations.
+This avoid confusion with `log()` which is treated as a one-way end flow component.
+
+A generated bean name for any `NamedComponent` within an integration flow is now based on the component type for better readability from visual tools, logs analyzers and metrics collectors.
+
+The `GenericHandler.handle()` now excepts a `MessageHeaders` type for the second argument.
+
+[[x5.1-dispatcher-exceptions]]
+==== Dispatcher Exceptions
+
+Exceptions caught and re-thrown by `AbstractDispatcher` are now more consistent:
+
+* A `MessagingException` of any kind that has a `failedMessage` property is re-thrown unchanged.
+* All other exceptions are wrapped in a `MessageDeliveryException` with the `failedMessage` property set.
+
+Previously:
+
+* A `MessagingException` of any kind that has a `failedMessage` property was re-thrown unchanged
+* A `MessagingException` that had no `failedMessage` property was wrapped in a `MessagingException` with the `failedMessage` property set.
+* Other `RuntimeException` instances were re-thrown unchanged.
+* Checked exceptions were wrapped in a `MessageDeliveryException` with the `failedMessage` property set.
+
+[[x5.1-global-channel-interceptors]]
+==== Global Channel Interceptors
+
+Global channel interceptors now apply to dynamically registered channels, such as through the `IntegrationFlowContext` when using the Java DSL or beans that are initialized using `beanFactory.initializeBean()`.
+Previously, when beans were created after the application context was refreshed, interceptors were not applied.
+
+[[x5.1-channel-interceptors]]
+==== Channel Interceptors
+
+`ChannelInterceptor.postReceive()` is no longer called when no message is received; it is no longer necessary to check for a `null` `Message>`.
+Previously, the method was called.
+If you have an interceptor that relies on the previous behavior, implement `afterReceiveCompleted()` instead, since that method is invoked, regardless of whether a message is received or not.
+Furthermore, the `PolledAmqpChannel` and `PolledJmsChannel` previously did not invoke `afterReceiveCompleted()` with `null`; they now do.
+
+[[x5.1-object-to-json-transformer]]
+==== `ObjectToJsonTransformer`
+
+A new `ResultType.BYTES` mode is introduced for the `ObjectToJsonTransformer`.
+
+See <> for more information.
+
+[[x5.1-integration-flows-generated-bean-names]]
+==== Integration Flows: Generated Bean Names
+
+Starting with version 5.0.5, generated bean names for the components in an `IntegrationFlow` include the flow bean name, followed by a dot, as a prefix.
+For example, if a flow bean were named `flowBean`, a generated bean might be named `flowBean.generatedBean`.
+
+See <> for more information.
+
+[[x5.1-aggregator]]
+==== Aggregator Changes
+
+If the `groupTimeout` is evaluated to a negative value, an aggregator now expires the group immediately.
+Only `null` is considered as a signal to do nothing for the current message.
+
+A new `popSequence` property has been introduced to allow (by default) to call a `MessageBuilder.popSequenceDetails()` for the output message.
+Also an `AbstractAggregatingMessageGroupProcessor` returns now an `AbstractIntegrationMessageBuilder` instead of the whole `Message` for optimization.
+
+See <> for more information.
+
+[[x5.1-publisher]]
+==== @Publisher annotation changes
+
+Starting with version 5.1, you must explicitly turn on the `@Publisher` AOP functionality by using `@EnablePublisher` or by using the `` child element on ``.
+Also the `proxy-target-class` and `order` attributes have been added for tuning the `ProxyFactory` configuration.
+
+See <> for more information.
+
+[[x5.1-files]]
+=== Files Changes
+
+If you are using `FileExistsMode.APPEND` or `FileExistsMode.APPEND_NO_FLUSH` you can provide a `newFileCallback` that will be called when creating a new file.
+This callback receives the newly created file and the message that triggered the callback.
+This could be used to write a CSV header, for an example.
+
+The `FileReadingMessageSource` now doesn't check and create a directory until its `start()` is called.
+So, if an Inbound Channel Adapter for the `FileReadingMessageSource` has `autoStartup = false`, there are no failures against the file system during application start up.
+
+See <> for more information.
+
+[[x5.1-amqp]]
+=== AMQP Changes
+
+We have made `ID` and `Timestamp` header mapping changes in the `DefaultAmqpHeaderMapper`.
+See the note near the bottom of <> for more information.
+
+The `contentType` header is now correctly mapped as an entry in the general headers map.
+See <> for more information.
+
+Starting with version 5.1.3, if a message conversion exception occurs when using manual acknowledgments, and an error channel is defined, the payload is a `ManualAckListenerExecutionFailedException` with additional `channel` and `deliveryTag` properties.
+This enables the error flow to ack/nack the original message.
+See <> for more information.
+
+[[x5.1-jdbc]]
+=== JDBC Changes
+
+A confusing `max-rows-per-poll` property on the JDBC Inbound Channel Adapter and JDBC Outbound Gateway has been deprecated in favor of the newly introduced `max-rows` property.
+
+The `JdbcMessageHandler` supports now a `batchUpdate` functionality when the payload of the request message is an instance of an `Iterable` type.
+
+The indexes for the `INT_CHANNEL_MESSAGE` table (for the `JdbcChannelMessageStore`) have been optimized.
+If you have large message groups in such a store, you may wish to alter the indexes.
+
+See <> for more information.
+
+[[x5.1-ftp-sftp]]
+=== FTP and SFTP Changes
+
+A `RotatingServerAdvice` is now available to poll multiple servers and directories with the inbound channel adapters.
+See <> and <> for more information.
+
+Also, inbound adapter `localFilenameExpression` instances can contain the `#remoteDirectory` variable, which contains the remote directory being polled.
+The generic type of the comparators (used to sort the fetched file list for the streaming adapters) has changed from `Comparator>` to `Comparator`.
+See <> and <> for more information.
+
+In addition, the synchronizers for inbound channel adapters can now be provided with a `Comparator`.
+This is useful when using `maxFetchSize` to limit the files retrieved.
+
+The `CachingSessionFactory` has a new property `testSession` which, when true, causes the factory to perform a `test()` operation on the `Session` when checking out an existing session from the cache.
+
+See <> and <> for more information.
+
+The outbound gateway MPUT command now supports a message payload with a collection of files or strings.
+See <> and <> for more information.
+
+[[x51.-tcp]]
+=== TCP Support
+
+When using SSL, host verification is now enabled, by default, to prevent man-in-the-middle attacks with a trusted certificate.
+See <> for more information.
+
+In addition the key and trust store types can now be configured on the `DefaultTcpSSLContextSupport`.
+
+[[x5.1-twitter]]
+=== Twitter Support
+
+Since the Spring Social project has moved to https://spring.io/blog/2018/07/03/spring-social-end-of-life-announcement[end of life status], Twitter support in Spring Integration has been moved to the Extensions project.
+See https://github.com/spring-projects/spring-integration-extensions/tree/master/spring-integration-social-twitter[Spring Integration Social Twitter] for more information.
+
+[[x51.-jms]]
+=== JMS Support
+
+The `JmsSendingMessageHandler` now provides `deliveryModeExpression` and `timeToLiveExpression` options to determine respective QoS options for JMS message to send at runtime.
+The `DefaultJmsHeaderMapper` now allows to map inbound `JMSDeliveryMode` and `JMSExpiration` properties via setting to `true` respective `setMapInboundDeliveryMode()` and `setMapInboundExpiration()` options.
+When a `JmsMessageDrivenEndpoint` or `JmsInboundGateway` is stopped, the associated listener container is now shut down; this closes its shared connection and any consumers.
+You can configure the endpoints to revert to the previous behavior.
+
+See <> for more information.
+
+[[x51.-http]]
+=== HTTP/WebFlux Support
+
+The `statusCodeExpression` (and `Function`) is now supplied with the `RequestEntity>` as a root object for evaluation context, so request headers, method, URI and body are available for target status code calculation.
+
+See <> and <> for more information.
+
+[[x51.-jmx]]
+=== JMX Changes
+
+Object name key values are now quoted if they contain any characters other than those allowed in a Java identifier (or period `.`).
+For example `org.springframework.integration:type=MessageChannel,` `name="input:foo.myGroup.errors"`.
+This has the side effect that previously "allowed" names, with such characters, will now be quoted.
+For example `org.springframework.integration:type=MessageChannel,` `name="input#foo.myGroup.errors"`.
+
+[[x51.-micrometer]]
+=== Micrometer Support Changes
+
+It is now simpler to customize the standard Micrometer meters created by the framework.
+See <> for more information.
+
+[[x51.-integration-graph]]
+=== Integration Graph Customization
+
+It is now possible to add additional properties to the `IntegrationNode` s via `Function> additionalPropertiesCallback` on the `IntegrationGraphServer`.
+See <> for more information.
+
+[[x51.-global-properties]]
+=== Integration Global Properties
+
+The Integration global properties (including defaults) can now be printed in the logs, when a `DEBUG` logic level is turned on for the `org.springframework.integration` category.
+See <> for more information.
+
+[[x51.-poller-annotation]]
+=== The `receiveTimeout` for `@Poller`
+
+The `@Poller` annotation now provides a `receiveTimeout` option for convenience.
+See <> for more information.
diff --git a/src/reference/asciidoc/docinfo.html b/src/reference/asciidoc/docinfo.html
new file mode 100644
index 0000000000..19e2462b2c
--- /dev/null
+++ b/src/reference/asciidoc/docinfo.html
@@ -0,0 +1,5 @@
+
diff --git a/src/reference/asciidoc/history.adoc b/src/reference/asciidoc/history.adoc
index 6b3c06d80f..3fe71f7bc1 100644
--- a/src/reference/asciidoc/history.adoc
+++ b/src/reference/asciidoc/history.adoc
@@ -2,6 +2,8 @@
== Change History
// BE SURE TO PRECEDE ALL include:: with a blank line - see https://github.com/asciidoctor/asciidoctor/issues/1297
+include::./changes-5.0-5.1.adoc[]
+
include::./changes-4.3-5.0.adoc[]
include::./changes-4.2-4.3.adoc[]
diff --git a/src/reference/asciidoc/index.adoc b/src/reference/asciidoc/index.adoc
index f88d8d6c9e..42500493ae 100644
--- a/src/reference/asciidoc/index.adoc
+++ b/src/reference/asciidoc/index.adoc
@@ -7,7 +7,9 @@
:hide-uri-scheme:
Mark Fisher; Marius Bogoevici; Iwein Fuld; Jonas Partner; Oleg Zhurakousky; Gary Russell; Dave Syer; Josh Long; David Turanski; Gunnar Hillert; Artem Bilan; Amol Nayak; Jay Bryant
+ifdef::backend-html5[]
*{project-version}*
+endif::[]
(C) 2009 - 2019 Pivotal Software, Inc.
All rights reserved.
@@ -20,7 +22,7 @@ include::./preface.adoc[]
= What's New?
[[spring-integration-intro-new]]
-For those who are already familiar with Spring Integration, this chapter provides a brief overview of the new features of version 5.1.
+For those who are already familiar with Spring Integration, this chapter provides a brief overview of the new features of version 5.2.
If you are interested in the changes and features that were introduced in earlier versions, see the <>.
diff --git a/src/reference/asciidoc/overview.adoc b/src/reference/asciidoc/overview.adoc
index 89e2f165db..0c02360806 100644
--- a/src/reference/asciidoc/overview.adoc
+++ b/src/reference/asciidoc/overview.adoc
@@ -432,7 +432,7 @@ The `@IntegrationConverter` annotation marks `Converter`, `GenericConverter`, or
This annotation is an analogue of the `` XML element (see <>).
You can place `@IntegrationConverter` annotations at the class level (with a `@Component` stereotype annotation) or on `@Bean` methods within `@Configuration` classes.
-See <> for more information about messaging mnnotations.
+See <> for more information about messaging annotations.
[[programming-considerations]]
=== Programming Considerations
diff --git a/src/reference/asciidoc/preface.adoc b/src/reference/asciidoc/preface.adoc
index 29a353d52a..4c1b003538 100644
--- a/src/reference/asciidoc/preface.adoc
+++ b/src/reference/asciidoc/preface.adoc
@@ -15,13 +15,13 @@ This section details the compatible http://www.oracle.com/technetwork/java/javas
[[supported-java-versions]]
=== Compatible Java Versions
-For Spring Integration 5.1.x, the minimum compatible Java version is Java SE 8.
+For Spring Integration 5.2.x, the minimum compatible Java version is Java SE 8.
Older versions of Java are not supported.
[[supported-spring-versions]]
=== Compatible Versions of the Spring Framework
-Spring Integration 5.1.x requires Spring Framework 5.1 or later.
+Spring Integration 5.2.x requires Spring Framework 5.2 or later.
[[code-conventions]]
== Code Conventions
diff --git a/src/reference/asciidoc/whats-new.adoc b/src/reference/asciidoc/whats-new.adoc
index a8fd06d0a5..1ed996667e 100644
--- a/src/reference/asciidoc/whats-new.adoc
+++ b/src/reference/asciidoc/whats-new.adoc
@@ -1,245 +1,13 @@
[[whats-new]]
-== What's New in Spring Integration 5.1?
+== What's New in Spring Integration 5.2?
-This chapter provides an overview of the new features and improvements that have been introduced with Spring
-Integration `5.1`.
-If you are interested in more details, see the Issue Tracker tickets that were resolved as part of the 5.1 development process.
+If you are interested in more details, see the Issue Tracker tickets that were resolved as part of the 5.2 development process.
-[[x5.1-new-components]]
+[[x5.2-new-components]]
=== New Components
-The following components are new in 5.1:
-
-* <>
-
-[[x5.1-AmqpDedicatedChannelAdvice]]
-==== `AmqpDedicatedChannelAdvice`
-
-See <>.
-
-[[x5.1-Functions]]
-==== Improved Function Support
-
-The `java.util.function` interfaces now have improved integration support in the Framework components.
-Also Kotlin lambdas now can be used for handler and source methods.
-
-See <>.
-
-[[x5.1-LongRunningTest]]
-==== `@LongRunningTest`
-
-A JUnit 5 `@LongRunningTest` conditional annotation is provided to check the environment or system properties for the `RUN_LONG_INTEGRATION_TESTS` entry with the value of `true` to determine if test should be run or skipped.
-
-See <>.
-
-[[x5.1-general]]
+[[x5.2-general]]
=== General Changes
-The following changes have been made in version 5.1:
-* <>
-* <>
-* <>
-* <>
-* <>
-* <>
-* <>
-* <>
-* <>
-* <>
-
-[[x5.1-java-dsl]]
-==== Java DSL
-
-The `IntegrationFlowContext` is now an interface and `IntegrationFlowRegistration` is an inner interface of `IntegrationFlowContext`.
-
-A new `logAndReply()` operator has been introduced for convenience when you wish to log at the end of a flow for request-reply configurations.
-This avoid confusion with `log()` which is treated as a one-way end flow component.
-
-A generated bean name for any `NamedComponent` within an integration flow is now based on the component type for better readability from visual tools, logs analyzers and metrics collectors.
-
-The `GenericHandler.handle()` now excepts a `MessageHeaders` type for the second argument.
-
-[[x5.1-dispatcher-exceptions]]
-==== Dispatcher Exceptions
-
-Exceptions caught and re-thrown by `AbstractDispatcher` are now more consistent:
-
-* A `MessagingException` of any kind that has a `failedMessage` property is re-thrown unchanged.
-* All other exceptions are wrapped in a `MessageDeliveryException` with the `failedMessage` property set.
-
-Previously:
-
-* A `MessagingException` of any kind that has a `failedMessage` property was re-thrown unchanged
-* A `MessagingException` that had no `failedMessage` property was wrapped in a `MessagingException` with the `failedMessage` property set.
-* Other `RuntimeException` instances were re-thrown unchanged.
-* Checked exceptions were wrapped in a `MessageDeliveryException` with the `failedMessage` property set.
-
-[[x5.1-global-channel-interceptors]]
-==== Global Channel Interceptors
-
-Global channel interceptors now apply to dynamically registered channels, such as through the `IntegrationFlowContext` when using the Java DSL or beans that are initialized using `beanFactory.initializeBean()`.
-Previously, when beans were created after the application context was refreshed, interceptors were not applied.
-
-[[x5.1-channel-interceptors]]
-==== Channel Interceptors
-
-`ChannelInterceptor.postReceive()` is no longer called when no message is received; it is no longer necessary to check for a `null` `Message>`.
-Previously, the method was called.
-If you have an interceptor that relies on the previous behavior, implement `afterReceiveCompleted()` instead, since that method is invoked, regardless of whether a message is received or not.
-Furthermore, the `PolledAmqpChannel` and `PolledJmsChannel` previously did not invoke `afterReceiveCompleted()` with `null`; they now do.
-
-[[x5.1-object-to-json-transformer]]
-==== `ObjectToJsonTransformer`
-
-A new `ResultType.BYTES` mode is introduced for the `ObjectToJsonTransformer`.
-
-See <> for more information.
-
-[[x5.1-integration-flows-generated-bean-names]]
-==== Integration Flows: Generated Bean Names
-
-Starting with version 5.0.5, generated bean names for the components in an `IntegrationFlow` include the flow bean name, followed by a dot, as a prefix.
-For example, if a flow bean were named `flowBean`, a generated bean might be named `flowBean.generatedBean`.
-
-See <> for more information.
-
-[[x5.1-aggregator]]
-==== Aggregator Changes
-
-If the `groupTimeout` is evaluated to a negative value, an aggregator now expires the group immediately.
-Only `null` is considered as a signal to do nothing for the current message.
-
-A new `popSequence` property has been introduced to allow (by default) to call a `MessageBuilder.popSequenceDetails()` for the output message.
-Also an `AbstractAggregatingMessageGroupProcessor` returns now an `AbstractIntegrationMessageBuilder` instead of the whole `Message` for optimization.
-
-See <> for more information.
-
-[[x5.1-publisher]]
-==== @Publisher annotation changes
-
-Starting with version 5.1, you must explicitly turn on the `@Publisher` AOP functionality by using `@EnablePublisher` or by using the `` child element on ``.
-Also the `proxy-target-class` and `order` attributes have been added for tuning the `ProxyFactory` configuration.
-
-See <> for more information.
-
-[[x5.1-files]]
-=== Files Changes
-
-If you are using `FileExistsMode.APPEND` or `FileExistsMode.APPEND_NO_FLUSH` you can provide a `newFileCallback` that will be called when creating a new file.
-This callback receives the newly created file and the message that triggered the callback.
-This could be used to write a CSV header, for an example.
-
-The `FileReadingMessageSource` now doesn't check and create a directory until its `start()` is called.
-So, if an Inbound Channel Adapter for the `FileReadingMessageSource` has `autoStartup = false`, there are no failures against the file system during application start up.
-
-See <> for more information.
-
-[[x5.1-amqp]]
-=== AMQP Changes
-
-We have made `ID` and `Timestamp` header mapping changes in the `DefaultAmqpHeaderMapper`.
-See the note near the bottom of <> for more information.
-
-The `contentType` header is now correctly mapped as an entry in the general headers map.
-See <> for more information.
-
-Starting with version 5.1.3, if a message conversion exception occurs when using manual acknowledgments, and an error channel is defined, the payload is a `ManualAckListenerExecutionFailedException` with additional `channel` and `deliveryTag` properties.
-This enables the error flow to ack/nack the original message.
-See <> for more information.
-
-[[x5.1-jdbc]]
-=== JDBC Changes
-
-A confusing `max-rows-per-poll` property on the JDBC Inbound Channel Adapter and JDBC Outbound Gateway has been deprecated in favor of the newly introduced `max-rows` property.
-
-The `JdbcMessageHandler` supports now a `batchUpdate` functionality when the payload of the request message is an instance of an `Iterable` type.
-
-The indexes for the `INT_CHANNEL_MESSAGE` table (for the `JdbcChannelMessageStore`) have been optimized.
-If you have large message groups in such a store, you may wish to alter the indexes.
-
-See <> for more information.
-
-[[x5.1-ftp-sftp]]
-=== FTP and SFTP Changes
-
-A `RotatingServerAdvice` is now available to poll multiple servers and directories with the inbound channel adapters.
-See <> and <> for more information.
-
-Also, inbound adapter `localFilenameExpression` instances can contain the `#remoteDirectory` variable, which contains the remote directory being polled.
-The generic type of the comparators (used to sort the fetched file list for the streaming adapters) has changed from `Comparator>` to `Comparator`.
-See <> and <> for more information.
-
-In addition, the synchronizers for inbound channel adapters can now be provided with a `Comparator`.
-This is useful when using `maxFetchSize` to limit the files retrieved.
-
-The `CachingSessionFactory` has a new property `testSession` which, when true, causes the factory to perform a `test()` operation on the `Session` when checking out an existing session from the cache.
-
-See <> and <> for more information.
-
-The outbound gateway MPUT command now supports a message payload with a collection of files or strings.
-See <> and <> for more information.
-
-[[x51.-tcp]]
-=== TCP Support
-
-When using SSL, host verification is now enabled, by default, to prevent man-in-the-middle attacks with a trusted certificate.
-See <> for more information.
-
-In addition the key and trust store types can now be configured on the `DefaultTcpSSLContextSupport`.
-
-[[x5.1-twitter]]
-=== Twitter Support
-
-Since the Spring Social project has moved to https://spring.io/blog/2018/07/03/spring-social-end-of-life-announcement[end of life status], Twitter support in Spring Integration has been moved to the Extensions project.
-See https://github.com/spring-projects/spring-integration-extensions/tree/master/spring-integration-social-twitter[Spring Integration Social Twitter] for more information.
-
-[[x51.-jms]]
-=== JMS Support
-
-The `JmsSendingMessageHandler` now provides `deliveryModeExpression` and `timeToLiveExpression` options to determine respective QoS options for JMS message to send at runtime.
-The `DefaultJmsHeaderMapper` now allows to map inbound `JMSDeliveryMode` and `JMSExpiration` properties via setting to `true` respective `setMapInboundDeliveryMode()` and `setMapInboundExpiration()` options.
-When a `JmsMessageDrivenEndpoint` or `JmsInboundGateway` is stopped, the associated listener container is now shut down; this closes its shared connection and any consumers.
-You can configure the endpoints to revert to the previous behavior.
-
-See <> for more information.
-
-[[x51.-http]]
-=== HTTP/WebFlux Support
-
-The `statusCodeExpression` (and `Function`) is now supplied with the `RequestEntity>` as a root object for evaluation context, so request headers, method, URI and body are available for target status code calculation.
-
-See <> and <> for more information.
-
-[[x51.-jmx]]
-=== JMX Changes
-
-Object name key values are now quoted if they contain any characters other than those allowed in a Java identifier (or period `.`).
-For example `org.springframework.integration:type=MessageChannel,` `name="input:foo.myGroup.errors"`.
-This has the side effect that previously "allowed" names, with such characters, will now be quoted.
-For example `org.springframework.integration:type=MessageChannel,` `name="input#foo.myGroup.errors"`.
-
-[[x51.-micrometer]]
-=== Micrometer Support Changes
-
-It is now simpler to customize the standard Micrometer meters created by the framework.
-See <> for more information.
-
-[[x51.-integration-graph]]
-=== Integration Graph Customization
-
-It is now possible to add additional properties to the `IntegrationNode` s via `Function> additionalPropertiesCallback` on the `IntegrationGraphServer`.
-See <> for more information.
-
-[[x51.-global-properties]]
-=== Integration Global Properties
-
-The Integration global properties (including defaults) can now be printed in the logs, when a `DEBUG` logic level is turned on for the `org.springframework.integration` category.
-See <> for more information.
-
-[[x51.-poller-annotation]]
-=== The `receiveTimeout` for `@Poller`
-
-The `@Poller` annotation now provides a `receiveTimeout` option for convenience.
-See <> for more information.