JIRA: https://jira.spring.io/browse/INT-275
In addition fix the `Lifecycle` issue in the `ServiceActivatorAnnotationPostProcessor`
Add Namespace support, Addition tests
and fix some typos in the XSD
INT-275: Fix failed tests
INT-275: Fix for `replyChannel` Header
Add `sync` reply test-case
INT-275: Make `ScatterGatherHandler` sync
Fix some `MessageHandler`s from `SmartLifecycle`
INT-275: Fix `ScatterGatherHandler.handleRequestMessage` logic
INT-275: Fix `ScatterGatherHandler` JMX proxying issues
* Make `AbstractCorrelatingMessageHandler.getMessageStore()` as `public`
* Move `ScatterGatherHandlerIntegrationTests` to the JMX module to be sure that `ScatterGatherHandler`
works well with `@EnableIntegrationMBeanExport`
* Add xml config sample how to use an internal gatherer's `MessageStore` in the `MessageGroupStoreReaper`
* Add `What's New` notice
JIRA: https://jira.spring.io/browse/INT-3520
INT-3520: Use `Condition` to wait items in the `Queue`
INT-3520: Reworking to the `Semaphore(0)`
* Implement 'artificial infinite wait'
* Add distributed test with infinite `receive()`
INT-3520: Correct usage of `Semaphore`
Minor Doc Polishing
JIRA: https://jira.spring.io/browse/INT-3516
* Add `Optional<>` support for `@Header` in the `MessagingMethodInvokerHelper`
* Add `Optional<>` test-case
* Change `sourceCompatibility` for test to the Java 8
INT-3516: Revert SF version to 4.1.1
Add Docs on the matter
Fix WS Tests; Revert StubJavaMailSender
https://build.spring.io/browse/INT-B41-118
Since `send` to the `discardChannel` caused from the separate Thread (`TaskScheduler` from `groupTimeout`)
there is some time window when receiving thread wait on `queue` lock, so `0` timeout to wait isn't enough
JIRA: https://jira.spring.io/browse/INT-3529
Late arriving messages will now be immediately discarded by
default.
INT-3529 Polishing
Move group completion to the Resequencer's `afterRelease()` when
the group is timed out.
JIRA: https://jira.spring.io/browse/INT-3528
Use `min` and `max` methods instead of sorting an entire collection to get the minimum or maximum element.
Change other inline `Comparator<?>`s to the `final` fields
JIRA: https://jira.spring.io/browse/INT-3527
* `WebSocketInboundChannelAdapter` now handles `CONNECT` STOMP message and sends `CONNECT_ACK` message to the `WebSocketSession` immediately
* `ExpressionMessageProducerSupport` implementations now checks the result of `expression` and if it is a `Message<?>` it is sent to channel without creating a new one
which previously wrapped that `Message<?>` as the `payload`.
* Add `<script>` support to the `<outbound-channel-adapter>`
* Upgrade to the SF 4.1.1
* Add appropriate notes to the Docs
JIRA: https://jira.spring.io/browse/INT-3512
INT-3512: Fix typos
INT-3512: add `expire-` prefix to the advice sub-elements
INT-3512: Mark `AggregatorWithCustomReleaseStrategyTests` as `LONG_RUNNING_TEST`
Doc Polishing
JIRA: https://jira.spring.io/browse/INT-3500
* add 'error-channel' to the <enricher> component
* delegate errorChannel to the internal gateway in ContentEnricher
* added tests for xml based and java based enrichers with error channels
INT-3500: Consider to add "error-channel" to the <enricher>
* Fixed typos and comments
* Reworked xml integration test to use the outputChannel and increased timeout
* Added overview in whats-new doc
INT-3500: Consider to add "error-channel" to the <enricher>
* Ensure requestChannel is set if an errorChannel is set
* Increased timeout to fix unit test
* Added details to content-enricher ref doc
Polishing
JIRA: https://jira.spring.io/browse/INT-1198
INT-1198: WebSocket: Add namespace support
Polishing components according to the namespace support experience
Parser for `<server-container>` and tests
INT-1198: Add parser tests for `<int-websocket:outbound-channel-adapter>`
Introduce `use-broker` on server side
Polishing according PR comments
`What's New` note
JIRA: https://jira.spring.io/browse/INT-3506
JIRA: https://jira.spring.io/browse/INT-3428
Support flows downstream of the gateway that support
returning a `Future<?>` payload.
Currently, any method that returns a type that is assignable
to `Future<?>` runs async and returns a `FutureTask<?>`.
This prevents a service-interface method that returns a
custom `Future<?>` object from being invoked without wrapping
that `Future<?>` in a `FutureTask<?>`.
Allow the async-executor to be set to `null` causing any method
returning `Future<?>` to run on the calling thread.
Add support for `ListenableFuture<?>`.
If the return type is a `RunnableFuture`, `ListenableFuture` or
`Future`, or exactly a `FutureTask` or `ListenableFutureTask`, run the flow
on the executor (if present); otherwise run on the calling thread.
INT-3506 Fix Object returnType
INT-3506 Polishing - PR Comments
Perform dummy invocations of `submit` and `submitListenable` to
determine the actual return types so that we can determine at
runtime whether the executor will return a type that is compatible
with the method return type. If not, run on the caller's thread.
Add DEBUG Log If Incompatible Future<?>
INT-3506 Add Support for MessagingGateway
Add a constant to indicate no executor.
Add tests.
INT-3506 Polishing and Docs
- Docbook
- XSD
- Change test to send calling thread in payload so we can determine whether
we need to return a Future or not; previously relied on the thread name
which was brittle.
Polishing JavaDocs.
Change `amqp.xml` to use `org.springframework.amqp.support.AmqpHeaders` instead of an old one.
JIRA: https://jira.spring.io/browse/INT-3492
Since `@Paylod` and `@Header(s)` annotations are in the Spring Framework,
there is no more need to support them in Spring Integration.
Deprecate them and leave for backward compatibility.
Will be removed in future releases.
Remove deprecated Gatewa's `#method` expression evaluation context variable
Tested `gradlew clean testall` with and without changed to the tests.
INT-3492: Add `MessagingAnnotationUtils#findMassagePartAnnotation`
Move `MessagingAnnotationUtils` to the `org.springframework.integration.util` package
JIRA: https://jira.spring.io/browse/INT-3402
* Add late resolution of channel names for the `MessagingGatewaySupport`
* Implement delegate logic for internal implementations like `ContentEnricher.Gateway`
JIRA: https://jira.spring.io/browse/INT-3489
* Catch `MessageDeliveryException` and reschedule `group-time out task`: `AbstractCorrelatingMessageHandler#scheduleGroupToForceComplete`
* Apply `send-timeout` for the `discardChannel`
* Mark `groupRemove = false` in case of `MessageDeliveryException`
* Improve `send-timeout` docs
INT-3489: Recalculate `groupTimeout` on each rescheduling
Add Test for Zero Timeout
JIRA: https://jira.spring.io/browse/INT-3370
* Add `BoonJsonObjectMapper`
* Provide some tests
* Remove deprecations
* Polishing test according removed deprecations
* Change `JsonObjectMapper#populateJavaTypes` to get deal with `payload`, not its `class`,
since we can't (and Jackson's `TypeFactory`, too) determine generic type from `Collection`.
Use `iterators` instead to retrieve the type from the first item.
Conflicts:
build.gradle
spring-integration-amqp/src/test/java/org/springframework/integration/amqp/support/DefaultAmqpHeaderMapperTests.java
INT-3370: Polishing according PR comments
* Apply Gary's polishing to the Docs
* Fix `RecipientListRouter` JavaDoc warn
* Fix typo in test name for `UdpUnicastEndToEndTests`
* Fix `RedisQueueOutboundChannelAdapterTests` do not use Jackson 1.x
Final Polish
JIRA: https://jira.spring.io/browse/INT-3402
After applying introduction of `AbstractMessageProducingHandler` there was need some simply refactoring to follow with DRY
JIRA: https://jira.spring.io/browse/INT-3422
* Add two methods:
```
boolean removeInterceptor(ChannelInterceptor interceptor);
boolean removeInterceptor(int index);
```
The method `removeInterceptorsOfType(Class<?> clazz)` isn't good, because we lead undesired behavior, when several provided interceptors might be of the same type (e.g. by superclass)
INT-3422: PR comments
This commit updates AbstractHeaderMapper in a number of ways:
* The 'userDefinedHeaderPrefix' property has been removed as some
advanced tests revealed that the feature is actually broken right
now and there is no easy way to fix it. A new richer hook point
that indicates if the property comes from the target object or the
standard MessageHeaders has been added.
* A HeaderMatcher interface has been introduced to replace the
lengthy checks in shouldMapHeader. Several implementations
of that interface are provided
* An additional pattern has been added that maps any header that is
*not* a standard header. It uses the standardHeaderPrefix property
for that purpose
* A number of protected method that were only used to create the
instance have been removed in favour of a non default constructor.
Subclasses should provide those *static* values in their own default
constructor.
* The list of transient headers can now be customized. Transient
headers are headers that should never be mapped. The standard
ErrorChannel and ReplyChannel headers have also been removed from
the default transient headers list as they no longer need to be
transient
header-mapper: Polishing
JIRA: https://jira.spring.io/browse/INT-2856
INT-2856:Add support for adding/removing individual recipients to the RecipientListRouter
INT-2856: allow recipient channel null on init
INT-2856: Polishing
JIRA: https://jira.spring.io/browse/INT-3486
Previously the undesired StackTrace has been logged in case of Thread interruption, e.g. component `stop()`
Suppress `InterruptedException` in the `SimplePool#getItem()`.
Since we do the `Thread.currentThread().interrupt();` on the `catch (InterruptedException e) {` it does not make sense
to rethrow it as a `MessagingException`, because the thread is interrupted anyway.
JIRA: https://jira.spring.io/browse/INT-3477
INT-3477: Fix `reactorEnvironment` propagation
* `MessagingGatewayRegistrar` parser the value for the `reactorEnvironment`
* Provide more interest test-case
* Polishing docs
INT-3477 Require `Environment` in case of Promise
* Do not use Reactor `Environment` as default instance.
* Require `Environment` reference, when is `Promise` method
* Polishing for tests
* Apply Gary's polishing for docs
INT-3477: Assert.notNull -> Assert.state
INT-3477: PR review
JIRA: https://jira.spring.io/browse/INT-3485
Delegate to doStop() instead of overriding stop() directly
Delegated call to doStop() rather than stop(), added author tag and added unit test for custom doStop(runnable)
Polishing
JIRA: https://jira.spring.io/browse/INT-3402
* Move `channel name to channel` resolution logic to the action, e.g. `sendReplyMessage`
* Remove resolution logic from `MessagingAnnotation` Processors
* Fix `AggregatorAnnotationPostProcessor` to invoke `handler.afterPropertiesSet()` one more time,
because of `AbstractMethodAnnotationPostProcessor` `this.beanFactory.initializeBean(handler, handlerBeanName)`
* `Filter` annotation: allow `property-placeholder` for the `discardWithinAdvice`
* Fix `EnricherParserTests4-context.xml` duration: use just `0` for the `reply-timeout`
INT-3402: Add `synchronized double check`
INT-3402: Polishing according PR comments
INT-3402: Optimization for `AbstractCorrelatingMH`
JIRA: https://jira.spring.io/browse/INT-2634
The Map entries with non-String keys are now skipped just with WARN message,
instead of `IllegalArgumentException` as it was before
JIRA: https://jira.spring.io/browse/INT-3474
When the MethodInvokingMessageHandler skips ineligible methods while
searching it emits a stack trace under DEBUG logging. This is not
needed, a simple log message is enough to convey the information.
Some POJOs gain ineligible methods when wrapped in a proxy so this
is no fault of the developer.
Other reasons for skipping methods (improperly set annotations etc)
continue to emit a stack trace.
INT-3474: Polishing
Rethrow `IneligibleMethodException` as `IllegalArgumentException` in case of a single `method` for processor
JIRA: https://jira.spring.io/browse/INT-3471
- Make final fields protected so they are available to subclasses
- Add property `removeOnGet` allowing the map entry to be removed immediately when it is used
- Add `time-to-live-expression` allowing override of the reaper delay
Polishing
Conflicts:
src/reference/docbook/whats-new.xml
JIRA: https://jira.spring.io/browse/INT-3465
Add support for adding/removing individual recipients to the RecipientListRouter
Modify documentation in what's new and spring-integration-4.1.xsd
Polishing
`AbstractRemoteFileOutboundGateway`: close `outputStream` before `file.delete()` to release exclusive file-lock
JIRA: https://jira.spring.io/browse/INT-3420
Add option to allow the empty group to remain after timeout
so late arriving messages can be discarded.
INT-3420 Add Callout Hyperlinks
The aggregator configuration documentation had hyperlinks
from the attribute descriptions to the attribute in the
XML, but not vice-versa. For a large number of attributes
such as this, bi-directional hyperlinks are useful.
INT-3420 Doc Polishing
JIRA: https://jira.spring.io/browse/INT-3475
Change the phase for `SourcePollingChannelAdapterFactoryBean`, `AbstractPollingEndpoint`, `MessageProducerSupport`, `JmsMessageDrivenEndpoint`
to the `Integer.MAX_VALUE / 2`
JIRA: https://jira.spring.io/browse/INT-3470
* Apply the last `ChannelInterceptor` changes - just `extends ChannelInterceptorAdapter`
* Change some tests to check content according to the new changes to the `GenericMessage#toString()`
**Cherry-pick to 4.0.x**
JIRA: https://jira.spring.io/browse/INT-3448
INT-3448: Addressing PR comments
Late Resolution of @Publisher.defaultChannel
Early resolution of the publisher default channel caused
`@ Configuration` factory beans to be instantiated before
Spring Integration bean post processors had been registered.
Use the channel name instead of channel reference and resolve
it when processing the first publish.
Merge branch 'INT-3448' of https://github.com/garyrussell/spring-integration into INT-3448
Conflicts:
spring-integration-core/src/test/java/org/springframework/integration/configuration/EnableIntegrationTests.java
INT-3448: Polishing
JIRA: https://jira.spring.io/browse/INT-3404
Previously, `AbstractInboundFileSynchronizingMessageSource` implemented both `MessageProducer` and `MessageSource`.
The `MessageProducer` is really redundant and confusing.
Also, it might produce some side-effects when using JavaConfig.
Provide some other simple but important fix for all `AbstractMessageSource` implementation to invoke `super.afterPropertiesSet()`
Polishing
Add mock bean factory to failing tests.
Revert state assertions in AbstractInboundFileSynchronizingMessageSource;
the fields are state, not arguments, at the time they are being
asserted.
JIRA: https://jira.spring.io/browse/INT-3458
* Change Spring AMQP to `1.3.5.RELEASE`
* `HttpRequestHandlingEndpointSupport`: remove `MappingJacksonHttpMessageConverter` registration
* `IntegrationRequestMappingHandlerMapping`: add 'fake' `name()` attribute to the inline `RequestMapping` annotation
* `StoredProcJmxManagedBeanTests`: remove `context.stop();` code, Since `MBeanExporter` deregister MBeans on `stop()` now
* `StoredProcPollingChannelAdapterParserTests`: change deprecated `ParameterizedSingleColumnRowMapper` to the `SingleColumnRowMapper`
* `Jms`: comment out the reflection code to check the value for the `recoveryInterval`, because it is removed already in favor of `backOff`
* `NotificationListeningMessageProducer`: move the start-up listener registration to the `onApplicationEvent`,
because `MBeanExporter` moved `registerBeans()` to the `start()` now.
The same `phase` might cause the issue, that MBeans aren't registered yet for `NotificationListeningMessageProducer`
* `JpaOutboundGatewayTests`: change `@TransactionConfiguration` to the `@Transactional`. Don't know why the first doesn't work now.
**Cherry-pick to 4.0.x**
INT-3458: Addressing PR comments
`NotificationListeningMessageProducer`: defer listener registration until `onApplicationEvent()`