# 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.