-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Spring Integration 4.0 to 4.1 Migration Guide
##Spring Framework 4.1 base line
Spring Integration 4.1 is based on Spring Framework 4.1 and isn't compatible with previous versions.
Some API has been moved to the Spring Messaging module and deprecated in Spring Integration, considering to be removed in future releases:
-
Payload
,Header
andHeaders
annotations from theorg.springframework.integration.annotation
package to respective annotations in theorg.springframework.messaging.handler.annotation
package.
##Spring AMQP 1.4
Starting with version 1.4 Spring AMQP Framewrok has been improved to use Spring Messaging abstraction. Some API has been moved frm Spring Integration to Spring AMQP:
-
org.springframework.integration.amqp.AmqpHeaders
->org.springframework.amqp.support.AmqpHeaders
. The former isdeprecated
now and extends the last one for backward compatibility.
##Removal of deprecated API
- The
GatewayProxyFactoryBean
no longer provides the#method
expression evaluation variable (which contained theMethod
name) in favor of#gatewayMethod
, which provides access to the entireMethod
object. - The
spring_reply_correlation
andspring_reply_to
AMQP header aren't mapped by default any more.
##Inbound Endpoints Lifecycle Phase
The default phase
of SourcePollingChannelAdapterFactoryBean
, AbstractPollingEndpoint
, MessageProducerSupport
, JmsMessageDrivenEndpoint
has been changed to the Integer.MAX_VALUE / 2
instead of 0
before. The bigger phase
value means that component will be started later and stopped earlier, than those who has less value. Previously, the same 0
default value caused an issue when Consumer Endpoint might be stopped on application stop before Inbound Endpoint and the "Dispatcher has no subscribers"
exception has been thrown. The similar issue we might have in a case, when Inbound Endpoint has been started before a Consumer Endpoint. Hence we ended up with losing messages issue.
##JMX
- The
<int-jmx:mbean-exporter/>
no longer supports ashutdown-executor
attribute.
##(S)FTP
- The
SftpPersistentAcceptOnceFileListFilter
usegetFilename
instead ofgetLongname
.
##HTTP
-
The
Content-Disposition
header is now mapped as standard one usingDefaultHttpHeaderMapper
. Previously it was mapped asuser-defined
with provided prefix,X-
by default. -
Before Spring Integration 4.0 the
MessageHeaders.CONTENT_TYPE
constant had had a valuecontent-type
. It was appropriate header name to be mapped to the HTTP headerContent-Type
. But since migration to Spring MessagingMessageHeaders.CONTENT_TYPE
constant has a valuecontentType
. It prevented to map Message header to the HTTP request properly. NowDefaultHttpHeaderMapper
has been changed to map HTTP request headerContent-Type
to/from theMessageHeaders.CONTENT_TYPE
, if the default configuration is used. It allows to propagate Message state to the HTTP request automatically:
<int:chain>
<int:object-to-json-transformer/>
<int-http:outbound-gateway url="http://service"/>
</int:chain>
##JMS
- Previously the
org.springframework.integration.jms.DefaultJmsHeaderMapper
overrode values, which had been able to be populated by theorg.springframework.jms.support.converter.MessageConverter
in theorg.springframework.integration.jms.JmsMessageDrivenEndpoint
logic. SinceMessageConverter
result has a precedence, which is closer to JMS, theDefaultJmsHeaderMapper
now skips those customMessageHeaders
which already has been populated by theMessageConverter
.
##Feed
The spring-integration-feed
module has been upgraded to the com.rometools:rome-fetcher:1.5.0
. And now rome
classes are under new packages, e.g. com.sun.syndication.feed.synd.SyndEntry
-> com.rometools.rome.feed.synd.SyndEntry
.