# What’s New?

## What’s New in Spring Integration 5.5?

If you are interested in more details, see the Issue Tracker tickets that were resolved as part of the 5.5 development process.

### New Components

#### File Aggregator

A `FileSplitter.FileMaker`-based implementation of `CorrelationStrategy`, `ReleaseStrategy` and `MessageGroupProcessor` as a `FileAggregator` component was introduced.
See [File Aggregator](./file.html#file-aggregator) for more information.

#### MQTT v5 Support

The `Mqttv5PahoMessageDrivenChannelAdapter` and `Mqttv5PahoMessageHandler` (including respective `MqttHeaderMapper`) were introduced to support MQTT v5 protocol communication.
See [MQTT v5 Support](./mqtt.html#mqtt-v5) for more information.

### General Changes

All the persistent `MessageGroupStore` implementation provide a `streamMessagesForGroup(Object groupId)` contract based on the target database streaming API.
See [Message Store](./message-store.html#message-store) for more information.

The `integrationGlobalProperties` bean (if declared) must be now an instance of `org.springframework.integration.context.IntegrationProperties` instead of `java.util.Properties`, which support is deprecated for backward compatibility.
The `spring.integration.channels.error.requireSubscribers=true` global property is added to indicate that the global default `errorChannel` must be configured with the `requireSubscribers` option (or not).
The `spring.integration.channels.error.ignoreFailures=true` global property is added to indicate that the global default `errorChannel` must ignore (or not) dispatching errors and pass the message to the next handler.
See [Global Properties](./configuration.html#global-properties) for more information.

An `AbstractPollingEndpoint` (source polling channel adapter and polling consumer) treats `maxMessagesPerPoll == 0` as to skip calling the source.
It can be changed to different value later on, e.g. via a Control Bus.
See [Polling Consumer](./endpoint.html#endpoint-pollingconsumer) for more information.

The `ConsumerEndpointFactoryBean` now accept a `reactiveCustomizer` `Function` to any input channel as reactive stream source and use a `ReactiveStreamsConsumer` underneath.
This is covered as a `ConsumerEndpointSpec.reactive()` option in Java DSL and as a `@Reactive` nested annotation for the messaging annotations.
See [Reactive Streams Support](./reactive-streams.html#reactive-streams) for more information.

The `groupTimeoutExpression` for a correlation message handler (an `Aggregator` and `Resequencer`) can now be evaluated to a `java.util.Date` for some fine-grained scheduling use-cases.
Also the `BiFunction groupConditionSupplier` option is added to the `AbstractCorrelatingMessageHandler` to supply a `MessageGroup` condition against a message to be added to the group.
See [Aggregator](./aggregator.html#aggregator) for more information.

The `MessageGroup` abstraction can be supplied with a `condition` to evaluate later on to make a decision for the group.
See [Message Group Condition](./message-store.html#message-group-condition) for more information.

#### Integration Flows Composition

The new `IntegrationFlows.from(IntegrationFlow)` factory method has been added to allow starting the current `IntegrationFlow` from the output of an existing flow.
In addition, the `IntegrationFlowDefinition` has added a `to(IntegrationFlow)` terminal operator to continue the current flow at the input channel of some other flow.
See [Integration Flows Composition](./dsl.html#integration-flows-composition) for more information.

#### AMQP Changes

The `AmqpInboundChannelAdapter` and `AmqpInboundGateway` (and the respective Java DSL builders) now support an `org.springframework.amqp.rabbit.retry.MessageRecoverer` as an AMQP-specific alternative to the general purpose `RecoveryCallback`.
See [AMQP Support](./amqp.html#amqp) for more information.

#### Redis Changes

The `ReactiveRedisStreamMessageProducer` has now setters for all the `StreamReceiver.StreamReceiverOptionsBuilder` options, including an `onErrorResume` function.
See [Redis Support](./redis.html#redis) for more information.

#### HTTP Changes

The `HttpRequestExecutingMessageHandler` doesn’t fallback to the `application/x-java-serialized-object` content type any more and lets the `RestTemplate` make the final decision for the request body conversion based on the `HttpMessageConverter` provided.
It also has now an `extractResponseBody` flag (which is `true` by default) to return just the response body, or to return the whole `ResponseEntity` as the reply message payload, independently of the provided `expectedResponseType`.
Same option is presented for the `WebFluxRequestExecutingMessageHandler`, too.
See [HTTP Support](./http.html#http) for more information.

#### File/FTP/SFTP Changes

The persistent file list filters now have a boolean property `forRecursion`.
Setting this property to `true`, also sets `alwaysAcceptDirectories`, which means that the recursive operation on the outbound gateways (`ls` and `mget`) will now always traverse the full directory tree each time.
This is to solve a problem where changes deep in the directory tree were not detected.
In addition, `forRecursion=true` causes the full path to files to be used as the metadata store keys; this solves a problem where the filter did not work properly if a file with the same name appears multiple times in different directories.
IMPORTANT: This means that existing keys in a persistent metadata store will not be found for files beneath the top level directory.
For this reason, the property is `false` by default; this may change in a future release.

The `FileInboundChannelAdapterSpec` has now a convenient `recursive(boolean)` option instead of requiring an explicit reference to the `RecursiveDirectoryScanner`.

The `remoteDirectoryExpression` can now be used in the `mv` command for convenience.

#### MongoDb Changes

The `MongoDbMessageSourceSpec` was added into MongoDd Java DSL.
An `update` option is now exposed on both the `MongoDbMessageSource` and `ReactiveMongoDbMessageSource` implementations.

See [MongoDb Support](./mongodb.html#mongodb) for more information.

#### WebSockets Changes

The WebSocket channel adapters based on `ServerWebSocketContainer` can now be registered and removed at runtime.

See [WebSockets Support](./web-sockets.html#web-sockets) for more information.

#### JPA Changes

The `JpaOutboundGateway` now supports an `Iterable` message payload for a `PersistMode.DELETE`.

See [Outbound Channel Adapter](./jpa.html#jpa-outbound-channel-adapter) for more information.

#### Gateway Changes

Previously, when using XML configuration, `@Gateway.payloadExpression` was ignored for no-argument methods.
There is one possible breaking change - if the method is annotated with `@Payload` as well as `@Gateway` (with a different expression) previously, the `@Payload` would be applied, now the `@Gateway.payloadExpression` is applied.
See [Gateway Configuration with Annotations and XML](./gateway.html#gateway-configuration-annotations) and [Invoking No-Argument Methods](./gateway.html#gateway-calling-no-argument-methods) for more information.
