Spring Integration Reference Manual

Authors

Mark Fisher, Marius Bogoevici, Iwein Fuld, Jonas Partner, Oleg Zhurakousky, Gary Russell, Dave Syer, Josh Long, David Turanski, Gunnar Hillert, Artem Bilan, Amol Nayak

5.0.7.BUILD-SNAPSHOT

Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically.


Table of Contents

I. Preface
Requirements
1. Compatible Java Versions
2. Compatible Versions of the Spring Framework
3. Code Conventions
1. Conventions in this Book
II. What’s new?
2. What’s new in Spring Integration 5.0?
2.1. New Components
2.1.1. Java DSL
2.1.2. Testing Support
2.1.3. MongoDB Outbound Gateway
2.1.4. WebFlux Gateways and Channel Adapters
2.1.5. Content Type Conversion
2.1.6. ErrorMessagePublisher and ErrorMessageStrategy
2.1.7. JDBC Metadata Store
2.2. General Changes
2.2.1. Core Changes
2.2.2. Gateway Changes
2.2.3. Aggregator Performance Changes
2.2.4. Splitter Changes
2.2.5. JMS Changes
2.2.6. Mail Changes
2.2.7. Feed Changes
2.2.8. File Changes
2.2.9. (S)FTP Changes
2.2.10. Integration Properties
2.2.11. Stream Changes
2.2.12. Barrier Changes
2.2.13. AMQP Changes
2.2.14. HTTP Changes
2.2.15. MQTT Changes
2.2.16. STOMP Changes
2.2.17. Web Services Changes
2.2.18. Redis Changes
2.2.19. TCP Changes
2.2.20. Gemfire Changes
2.2.21. Jdbc Changes
2.2.22. Metrics Changes
2.2.23. @EndpointId Annotations
2.2.24. Integration Flows: Generated bean names
III. Overview of Spring Integration Framework
3. Spring Integration Overview
3.1. Background
3.2. Goals and Principles
3.3. Main Components
3.3.1. Message
3.3.2. Message Channel
3.3.3. Message Endpoint
3.4. Message Endpoints
3.4.1. Transformer
3.4.2. Filter
3.4.3. Router
3.4.4. Splitter
3.4.5. Aggregator
3.4.6. Service Activator
3.4.7. Channel Adapter
3.4.8. Endpoint Bean Names
3.5. Configuration and @EnableIntegration
3.6. Programming Considerations
3.7. Considerations When using Packaged (e.g. Shaded) Jars
3.8. Programming Tips and Tricks
3.8.1. XML Schemas
3.8.2. Finding Class Names for Java and DSL Configuration
3.9. POJO Method invocation
IV. Core Messaging
4. Messaging Channels
4.1. Message Channels
4.1.1. The MessageChannel Interface
PollableChannel
SubscribableChannel
4.1.2. Message Channel Implementations
PublishSubscribeChannel
QueueChannel
PriorityChannel
RendezvousChannel
DirectChannel
ExecutorChannel
Scoped Channel
4.1.3. Channel Interceptors
4.1.4. MessagingTemplate
4.1.5. Configuring Message Channels
DirectChannel Configuration
Datatype Channel Configuration
QueueChannel Configuration
PublishSubscribeChannel Configuration
ExecutorChannel
PriorityChannel Configuration
RendezvousChannel Configuration
Scoped Channel Configuration
Channel Interceptor Configuration
Global Channel Interceptor Configuration
Wire Tap
Conditional Wire Taps
Global Wire Tap Configuration
4.1.6. Special Channels
4.2. Poller
4.2.1. Polling Consumer
4.2.2. Pollable Message Source
4.2.3. Deferred Acknowledgment Pollable Message Source
4.2.4. Conditional Pollers for Message Sources
Background
"Smart" Polling
SimpleActiveIdleMessageSourceAdvice
CompoundTriggerAdvice
4.3. Channel Adapter
4.3.1. Configuring An Inbound Channel Adapter
4.3.2. Configuring An Outbound Channel Adapter
4.3.3. Channel Adapter Expressions and Scripts
4.4. Messaging Bridge
4.4.1. Introduction
4.4.2. Configuring a Bridge with XML
4.4.3. Configuring a Bridge with Java Configuration
4.4.4. Configuring a Bridge with the Java DSL
5. Message Construction
5.1. Message
5.1.1. The Message Interface
5.1.2. Message Headers
MessageHeaderAccessor API
Message ID Generation
Read-only Headers
Header Propagation
5.1.3. Message Implementations
5.1.4. The MessageBuilder Helper Class
6. Message Routing
6.1. Routers
6.1.1. Overview
6.1.2. Common Router Parameters
Inside and Outside of a Chain
Top-Level (Outside of a Chain)
6.1.3. Router Implementations
PayloadTypeRouter
HeaderValueRouter
RecipientListRouter
RecipientListRouterManagement
XPath Router
Routing and Error handling
6.1.4. Configuring a Generic Router
Configuring a Content Based Router with XML
Configuring a Router with Annotations
6.1.5. Dynamic Routers
Manage Router Mappings using the Control Bus
Manage Router Mappings using JMX
Routing Slip
Process Manager Enterprise Integration Pattern
6.2. Filter
6.2.1. Introduction
6.2.2. Configuring Filter
Configuring a Filter with XML
Configuring a Filter with Annotations
6.3. Splitter
6.3.1. Introduction
6.3.2. Programming model
6.3.3. Configuring Splitter
Configuring a Splitter using XML
Configuring a Splitter with Annotations
6.4. Aggregator
6.4.1. Introduction
6.4.2. Functionality
6.4.3. Programming model
AggregatingMessageHandler
ReleaseStrategy
Aggregating Large Groups
CorrelationStrategy
LockRegistry
6.4.4. Configuring an Aggregator
Configuring an Aggregator with XML
Configuring an Aggregator with Annotations
6.4.5. Managing State in an Aggregator: MessageGroupStore
6.5. Resequencer
6.5.1. Introduction
6.5.2. Functionality
6.5.3. Configuring a Resequencer
6.6. Message Handler Chain
6.6.1. Introduction
6.6.2. Configuring a Chain
6.7. Scatter-Gather
6.7.1. Introduction
6.7.2. Functionality
6.7.3. Configuring a Scatter-Gather Endpoint
6.8. Thread Barrier
7. Message Transformation
7.1. Transformer
7.1.1. Introduction
7.1.2. Configuring Transformer
Configuring Transformer with XML
Common Transformers
Configuring a Transformer with Annotations
7.1.3. Header Filter
7.1.4. Codec-Based Transformers
7.2. Content Enricher
7.2.1. Introduction
7.2.2. Header Enricher
Configuring a Header Enricher with Java Configuration
Configuring a Header Enricher with the Java DSL
Header Channel Registry
7.2.3. Payload Enricher
Configuration
Examples
7.3. Claim Check
7.3.1. Introduction
7.3.2. Incoming Claim Check Transformer
7.3.3. Outgoing Claim Check Transformer
7.3.4. A word on Message Store
7.4. Codec
7.4.1. Introduction
7.4.2. EncodingPayloadTransformer
7.4.3. DecodingTransformer
7.4.4. CodecMessageConverter
7.4.5. Kryo
Customizing Kryo
8. Messaging Endpoints
8.1. Message Endpoints
8.1.1. Message Handler
8.1.2. Event Driven Consumer
8.1.3. Polling Consumer
8.1.4. Endpoint Namespace Support
8.1.5. Change Polling Rate at Runtime
8.1.6. Payload Type Conversion
8.1.7. Content Type Conversion
8.1.8. Asynchronous polling
8.1.9. Endpoint Inner Beans
8.2. Endpoint Roles
8.3. Leadership Event Handling
8.4. Messaging Gateways
8.4.1. Enter the GatewayProxyFactoryBean
8.4.2. Gateway XML Namespace Support
8.4.3. Setting the Default Reply Channel
8.4.4. Gateway Configuration with Annotations and/or XML
8.4.5. Mapping Method Arguments to a Message
8.4.6. @MessagingGateway Annotation
8.4.7. Invoking No-Argument Methods
8.4.8. Error Handling
8.4.9. Gateway Timeouts
8.4.10. Asynchronous Gateway
Introduction
ListenableFuture
AsyncTaskExecutor
CompletableFuture
Reactor Mono
8.4.11. Gateway behavior when no response arrives
8.5. Service Activator
8.5.1. Introduction
8.5.2. Configuring Service Activator
8.5.3. Asynchronous Service Activator
8.6. Delayer
8.6.1. Introduction
8.6.2. Configuring a Delayer
8.6.3. Delayer and a Message Store
8.7. Scripting support
8.7.1. Script configuration
8.8. Groovy support
8.8.1. Groovy configuration
8.8.2. Control Bus
8.9. Adding Behavior to Endpoints
8.9.1. Introduction
8.9.2. Provided Advice Classes
Retry Advice
Circuit Breaker Advice
Expression Evaluating Advice
8.9.3. Custom Advice Classes
8.9.4. Other Advice Chain Elements
8.9.5. Handle Message Advice
8.9.6. Transaction Support
8.9.7. Advising Filters
8.9.8. Advising Endpoints Using Annotations
8.9.9. Ordering Advices within an Advice Chain
8.9.10. Advised Handler Properties
8.9.11. Idempotent Receiver Enterprise Integration Pattern
8.10. Logging Channel Adapter
8.10.1. Configuring with Java Configuration
8.10.2. Configuring with the Java DSL
9. Java DSL
9.1. Example Configurations
9.2. Introduction
9.3. DSL Basics
9.4. Message Channels
9.5. Pollers
9.6. DSL and Endpoint Configuration
9.7. Transformers
9.8. Inbound Channel Adapters
9.9. Message Routers
9.10. Splitters
9.11. Aggregators and Resequencers
9.12. ServiceActivators (.handle())
9.13. Operator log()
9.14. MessageChannelSpec.wireTap()
9.15. Working With Message Flows
9.16. FunctionExpression
9.17. Sub Flows support
9.18. Using Protocol Adapters
9.19. IntegrationFlowAdapter
9.20. Dynamic and runtime Integration Flows
9.21. IntegrationFlow as Gateway
10. System Management
10.1. Metrics and Management
10.1.1. Configuring Metrics Capture
10.1.2. Micrometer Integration
10.1.3. MessageChannel Metric Features
10.1.4. MessageHandler Metric Features
10.1.5. Time-Based Average Estimates
10.1.6. Metrics Factory
10.2. JMX Support
10.2.1. Notification Listening Channel Adapter
10.2.2. Notification Publishing Channel Adapter
10.2.3. Attribute Polling Channel Adapter
10.2.4. Tree Polling Channel Adapter
10.2.5. Operation Invoking Channel Adapter
10.2.6. Operation Invoking Outbound Gateway
10.2.7. MBean Exporter
MBean ObjectNames
JMX Improvements
Orderly Shutdown Managed Operation
10.3. Message History
10.3.1. Message History Configuration
10.4. Message Store
10.4.1. MessageGroupFactory
10.4.2. Persistence MessageGroupStore and Lazy-Load
10.5. Metadata Store
10.5.1. Idempotent Receiver and Metadata Store
10.5.2. MetadataStoreListener
10.6. Control Bus
10.7. Orderly Shutdown
10.8. Integration Graph
10.8.1. Graph Runtime Model
10.9. Integration Graph Controller
V. Integration Endpoints
11. Endpoint Quick Reference Table
12. AMQP Support
12.1. Introduction
12.2. Inbound Channel Adapter
12.2.1. Configuring with Java Configuration
12.2.2. Configuring with the Java DSL
12.3. Polled Inbound Channel Adapter
12.4. Inbound Gateway
12.4.1. Configuring with Java Configuration
12.4.2. Configuring with the Java DSL
12.5. Inbound Endpoint Acknowledge Mode
12.6. Outbound Channel Adapter
12.6.1. Configuring with Java Configuration
12.6.2. Configuring with the Java DSL
12.7. Outbound Gateway
12.7.1. Configuring with Java Configuration
12.7.2. Configuring with the Java DSL
12.8. Async Outbound Gateway
12.8.1. Configuring with Java Configuration
12.8.2. Configuring with the Java DSL
12.9. Outbound Message Conversion
12.10. Outbound User Id
12.11. Delayed Message Exchange
12.12. AMQP Backed Message Channels
12.12.1. Configuring with Java Configuration
12.12.2. Configuring with the Java DSL
12.13. AMQP Message Headers
12.14. AMQP Samples
13. Spring ApplicationEvent Support
13.1. Receiving Spring Application Events
13.2. Sending Spring Application Events
14. Feed Adapter
14.1. Introduction
14.2. Feed Inbound Channel Adapter
14.3. Java DSL and Annotation configuration
15. File Support
15.1. Introduction
15.2. Reading Files
15.2.1. Namespace Support
15.2.2. WatchServiceDirectoryScanner
15.2.3. Limiting Memory Consumption
15.2.4. Configuring with Java Configuration
15.2.5. Configuring with the Java DSL
15.2.6. 'Tail’ing Files
15.2.7. Dealing With Incomplete Data
15.3. Writing files
15.3.1. Generating File Names
15.3.2. Specifying the Output Directory
15.3.3. Dealing with Existing Destination Files
15.3.4. Flushing Files When using APPEND_NO_FLUSH
15.3.5. File Timestamps
15.3.6. File Permissions
15.3.7. File Outbound Channel Adapter
15.3.8. Outbound Gateway
15.3.9. Configuring with Java Configuration
15.3.10. Configuring with the Java DSL
15.4. File Transformers
15.5. File Splitter
15.5.1. Configuring with Java Configuration
15.5.2. Configuring with the Java DSL
16. FTP/FTPS Adapters
16.1. Introduction
16.2. FTP Session Factory
16.2.1. Default Factories
16.2.2. FTPS and Shared SSLSession
16.3. Delegating Session Factory
16.4. FTP Inbound Channel Adapter
16.4.1. Recovering from Failures
16.4.2. Configuring with Java Configuration
16.4.3. Configuring with the Java DSL
16.4.4. Dealing With Incomplete Data
16.5. FTP Streaming Inbound Channel Adapter
16.5.1. Configuring with Java Configuration
16.6. Inbound Channel Adapters: Controlling Remote File Fetching
16.7. FTP Outbound Channel Adapter
16.7.1. Configuring with Java Configuration
16.7.2. Configuring with the Java DSL
16.8. FTP Outbound Gateway
16.8.1. Configuring with Java Configuration
16.8.2. Configuring with the Java DSL
16.8.3. Outbound Gateway Partial Success (mget and mput)
16.9. FTP Session Caching
16.10. RemoteFileTemplate
16.11. MessageSessionCallback
17. GemFire Support
17.1. Introduction
17.2. Inbound Channel Adapter
17.3. Continuous Query Inbound Channel Adapter
17.4. Outbound Channel Adapter
17.5. Gemfire Message Store
17.6. Gemfire Lock Registry
17.7. Gemfire Metadata Store
18. HTTP Support
18.1. Introduction
18.2. Http Inbound Components
18.3. Http Outbound Components
18.3.1. HttpRequestExecutingMessageHandler
18.4. HTTP Namespace Support
18.4.1. Introduction
18.4.2. Inbound
18.4.3. Request Mapping Support
18.4.4. Cross-Origin Resource Sharing (CORS) Support
18.4.5. Response StatusCode
18.4.6. URI Template Variables and Expressions
18.4.7. Outbound
18.4.8. Mapping URI Variables
18.4.9. Controlling URI Encoding
18.5. Configuring HTTP Endpoints with Java
18.6. Timeout Handling
18.7. HTTP Proxy configuration
18.8. HTTP Header Mappings
18.9. Integration Graph Controller
18.10. HTTP Samples
18.10.1. Multipart HTTP request - RestTemplate (client) and Http Inbound Gateway (server)
19. JDBC Support
19.1. Inbound Channel Adapter
19.1.1. Polling and Transactions
19.1.2. Max-rows-per-poll versus Max-messages-per-poll
19.2. Outbound Channel Adapter
19.3. Outbound Gateway
19.4. JDBC Message Store
19.4.1. Initializing the Database
19.4.2. The Generic JDBC Message Store
19.4.3. Backing Message Channels
19.4.4. Partitioning a Message Store
19.5. Stored Procedures
19.5.1. Supported Databases
19.5.2. Configuration
19.5.3. Common Configuration Attributes
19.5.4. Common Configuration Sub-Elements
19.5.5. Defining Parameter Sources
19.5.6. Stored Procedure Inbound Channel Adapter
19.5.7. Stored Procedure Outbound Channel Adapter
19.5.8. Stored Procedure Outbound Gateway
19.5.9. Examples
19.6. JDBC Lock Registry
19.7. JDBC Metadata Store
20. JPA Support
20.1. Supported Persistence Providers
20.2. Java Implementation
20.3. Namespace Support
20.3.1. Common XML Namespace Configuration Attributes
20.3.2. Providing JPA Query Parameters
20.3.3. Transaction Handling
20.4. Inbound Channel Adapter
20.4.1. Configuration Parameter Reference
20.4.2. Configuring with Java Configuration
20.4.3. Configuring with the Java DSL
20.5. Outbound Channel Adapter
20.5.1. Using an Entity Class
20.5.2. Using JPA Query Language (JPA QL)
20.5.3. Using Native Queries
20.5.4. Using Named Queries
20.5.5. Configuration Parameter Reference
20.5.6. Configuring with Java Configuration
20.5.7. Configuring with the Java DSL
20.6. Outbound Gateways
20.6.1. Common Configuration Parameters
20.6.2. Updating Outbound Gateway
20.6.3. Configuring with Java Configuration
20.6.4. Configuring with the Java DSL
20.6.5. Retrieving Outbound Gateway
20.6.6. Configuring with Java Configuration
20.6.7. Configuring with the Java DSL
20.6.8. JPA Outbound Gateway Samples
21. JMS Support
21.1. Inbound Channel Adapter
21.1.1. Transactions
21.2. Message-Driven Channel Adapter
21.2.1. Inbound Conversion Errors
21.3. Outbound Channel Adapter
21.3.1. Transactions
21.4. Inbound Gateway
21.5. Outbound Gateway
21.5.1. Gateway Reply Correlation
21.5.2. Async Gateway
21.5.3. Attribute Reference
21.6. Mapping Message Headers to/from JMS Message
21.7. Message Conversion, Marshalling and Unmarshalling
21.8. JMS Backed Message Channels
21.9. Using JMS Message Selectors
21.10. JMS Samples
22. Mail Support
22.1. Mail-Sending Channel Adapter
22.2. Mail-Receiving Channel Adapter
22.3. Inbound Mail Message Mapping
22.4. Mail Namespace Support
22.5. Marking IMAP Messages When \Recent is Not Supported
22.6. Email Message Filtering
22.7. Transaction Synchronization
23. MongoDb Support
23.1. Introduction
23.2. Connecting to MongoDb
23.3. MongoDB Message Store
23.3.1. MongoDB Channel Message Store
23.3.2. MongoDB Metadata Store
23.4. MongoDB Inbound Channel Adapter
23.5. MongoDB Outbound Channel Adapter
23.6. MongoDB Outbound Gateway
23.6.1. Configuring with Java Configuration
23.6.2. Configuring with the Java DSL
24. MQTT Support
24.1. Introduction
24.2. Inbound (message-driven) Channel Adapter
24.2.1. Adding/Removing Topics at Runtime
24.2.2. Configuring with Java Configuration
24.3. Outbound Channel Adapter
24.3.1. Configuring with Java Configuration
25. Redis Support
25.1. Introduction
25.2. Connecting to Redis
25.3. Messaging with Redis
25.3.1. Redis Publish/Subscribe channel
25.3.2. Redis Inbound Channel Adapter
25.3.3. Redis Outbound Channel Adapter
25.3.4. Redis Queue Inbound Channel Adapter
25.3.5. Redis Queue Outbound Channel Adapter
25.3.6. Redis Application Events
25.4. Redis Message Store
25.4.1. Redis Channel Message Stores
25.5. Redis Metadata Store
25.6. RedisStore Inbound Channel Adapter
25.7. RedisStore Outbound Channel Adapter
25.8. Redis Outbound Command Gateway
25.9. Redis Queue Outbound Gateway
25.10. Redis Queue Inbound Gateway
25.11. Redis Lock Registry
26. Resource Support
26.1. Introduction
26.2. Resource Inbound Channel Adapter
27. RMI Support
27.1. Introduction
27.2. Outbound RMI
27.3. Inbound RMI
27.4. RMI namespace support
27.5. Configuring with Java Configuration
28. SFTP Adapters
28.1. Introduction
28.2. SFTP Session Factory
28.2.1. Configuration Properties
28.3. Proxy Factory Bean
28.4. Delegating Session Factory
28.5. SFTP Session Caching
28.6. RemoteFileTemplate
28.7. SFTP Inbound Channel Adapter
28.7.1. Recovering from Failures
28.7.2. Configuring with Java Configuration
28.7.3. Configuring with the Java DSL
28.7.4. Dealing With Incomplete Data
28.8. SFTP Streaming Inbound Channel Adapter
28.8.1. Configuring with Java Configuration
28.9. Inbound Channel Adapters: Controlling Remote File Fetching
28.10. SFTP Outbound Channel Adapter
28.10.1. Configuring with Java Configuration
28.10.2. Configuring with the Java DSL
28.11. SFTP Outbound Gateway
28.11.1. Configuring with Java Configuration
28.11.2. Configuring with the Java DSL
28.11.3. Outbound Gateway Partial Success (mget and mput)
28.12. SFTP/JSCH Logging
28.13. MessageSessionCallback
29. STOMP Support
29.1. Introduction
29.2. Overview
29.3. STOMP Inbound Channel Adapter
29.4. STOMP Outbound Channel Adapter
29.5. STOMP Headers Mapping
29.6. STOMP Integration Events
29.7. STOMP Adapters Java Configuration
29.8. STOMP Namespace Support
30. Stream Support
30.1. Introduction
30.2. Reading from streams
30.3. Writing to streams
30.4. Stream namespace support
31. Syslog Support
31.1. Introduction
31.2. Syslog <inbound-channel-adapter>
31.2.1. Example Configuration
32. TCP and UDP Support
32.1. Introduction
32.2. UDP Adapters
32.2.1. Outbound (XML Configuration)
32.2.2. Outbound (Java Configuration)
32.2.3. Outbound (Java DSL Configuration)
32.2.4. Inbound (XML Configuration)
32.2.5. Inbound (Java Configuration)
32.2.6. Inbound (Java DSL Configuration)
32.2.7. Server Listening Events
32.2.8. Advanced Outbound Configuration
32.3. TCP Connection Factories
32.3.1. TCP Caching Client Connection Factory
32.3.2. TCP Failover Client Connection Factory
32.3.3. TCP Thread Affinity Connection Factory
32.4. TCP Connection Interceptors
32.5. TCP Connection Events
32.6. TCP Adapters
32.7. TCP Gateways
32.8. TCP Message Correlation
32.8.1. Overview
32.8.2. Gateways
32.8.3. Collaborating Outbound and Inbound Channel Adapters
32.8.4. Transferring Headers
32.9. A Note About NIO
32.9.1. Thread Pool Task Executor with CALLER_RUNS Policy
32.10. SSL/TLS Support
32.10.1. Overview
32.10.2. Getting Started
32.11. Advanced Techniques
32.11.1. Strategy Interfaces
32.11.2. Example: Enabling SSL Client Authentication
32.12. IP Configuration Attributes
32.13. IP Message Headers
32.14. Annotation-Based Configuration
33. Twitter Support
33.1. Introduction
33.2. Twitter OAuth Configuration
33.3. Twitter Template
33.4. Twitter Inbound Adapters
33.4.1. Inbound Message Channel Adapter
33.4.2. Direct Inbound Message Channel Adapter
33.4.3. Mentions Inbound Message Channel Adapter
33.4.4. Search Inbound Message Channel Adapter
33.5. Twitter Outbound Adapter
33.5.1. Twitter Outbound Update Channel Adapter
33.5.2. Twitter Outbound Direct Message Channel Adapter
33.6. Twitter Search Outbound Gateway
34. WebFlux Support
34.1. Introduction
34.2. WebFlux Inbound Components
34.3. WebFlux Outbound Components
34.4. WebFlux Namespace Support
34.4.1. Introduction
34.4.2. Inbound
34.4.3. Outbound
34.5. Configuring WebFlux Endpoints with Java
34.6. WebFlux Header Mappings
35. WebSockets Support
35.1. Introduction
35.2. Overview
35.3. WebSocket Inbound Channel Adapter
35.4. WebSocket Outbound Channel Adapter
35.5. WebSockets Namespace Support
35.6. ClientStompEncoder
36. Web Services Support
36.1. Outbound Web Service Gateways
36.2. Inbound Web Service Gateways
36.3. Web Service Namespace Support
36.4. Outbound URI Configuration
36.5. WS Message Headers
36.6. MTOM Support
37. XML Support - Dealing with XML Payloads
37.1. Introduction
37.2. Namespace Support
37.2.1. XPath Expressions
Providing Namespaces (Optional) to XPath Expressions
Using XPath Expressions with Default Namespaces
37.3. Transforming XML Payloads
37.3.1. Configuring Transformers as Beans
UnmarshallingTransformer
MarshallingTransformer
XsltPayloadTransformer
ResultTransformers
37.3.2. Namespace Support for XML Transformers
37.3.3. Namespace Configuration and ResultTransformers
37.4. Transforming XML Messages Using XPath
37.5. Splitting XML Messages
37.6. Routing XML Messages Using XPath
37.6.1. XML Payload Converter
37.7. XPath Header Enricher
37.8. Using the XPath Filter
37.9. #xpath SpEL Function
37.10. XML Validating Filter
38. XMPP Support
38.1. Introduction
38.2. XMPP Connection
38.3. XMPP Messages
38.3.1. Inbound Message Channel Adapter
38.3.2. Outbound Message Channel Adapter
38.4. XMPP Presence
38.4.1. Inbound Presence Message Channel Adapter
38.4.2. Outbound Presence Message Channel Adapter
38.5. Advanced Configuration
38.6. XMPP Message Headers
38.7. XMPP Extensions
39. Zookeeper Support
39.1. Introduction
39.2. Zookeeper Metadata Store
39.3. Zookeeper Lock Registry
39.4. Zookeeper Leadership Event Handling
VI. Appendices
A. Spring Expression Language (SpEL)
A.1. Introduction
A.2. SpEL Evaluation Context Customization
A.3. SpEL Functions
A.4. PropertyAccessors
B. Message Publishing
B.1. Message Publishing Configuration
B.1.1. Annotation-driven approach via @Publisher annotation
B.1.2. XML-based approach via the <publishing-interceptor> element
B.1.3. Producing and publishing messages based on a scheduled trigger
C. Transaction Support
C.1. Understanding Transactions in Message flows
C.1.1. Poller Transaction Support
C.2. Transaction Boundaries
C.3. Transaction Synchronization
C.4. Pseudo Transactions
D. Security in Spring Integration
D.1. Introduction
D.2. Securing channels
D.3. SecurityContext Propagation
E. Configuration
E.1. Introduction
E.2. Namespace Support
E.3. Configuring the Task Scheduler
E.4. Error Handling
E.5. Global Properties
E.6. Annotation Support
E.6.1. Messaging Meta-Annotations
E.6.2. Annotations on @Beans
E.6.3. Creating a Bridge with Annotations
E.6.4. Advising Annotated Endpoints
E.7. Message Mapping rules and conventions
E.7.1. Simple Scenarios
E.7.2. Complex Scenarios
F. Testing support
F.1. Introduction
F.2. Testing Utilities
F.2.1. TestUtils
F.2.2. SocketUtils
F.2.3. OnlyOnceTrigger
F.2.4. Support Components
F.2.5. Hamcrest and Mockito Matchers
F.3. Spring Integration and test context
F.4. Integration Mocks
F.4.1. MockIntegration
F.5. Other Resources
G. Spring Integration Samples
G.1. Introduction
G.2. Where to get Samples
G.3. Submitting Samples or Sample Requests
G.4. Samples Structure
G.5. Samples
G.5.1. Loan Broker
G.5.2. The Cafe Sample
G.5.3. The XML Messaging Sample
H. Additional Resources
H.1. Spring Integration Home
I. Change History
I.1. Changes between 4.2 and 4.3
I.2. New Components
I.2.1. AMQP Async Outbound Gateway
I.2.2. MessageGroupFactory
I.2.3. PersistentMessageGroup
I.2.4. FTP/SFTP Streaming Inbound Channel Adapters
I.2.5. Stream Transformer
I.2.6. Integration Graph
I.2.7. JDBC Lock Registry
I.2.8. Leader Initiator for Lock Registry
I.3. General Changes
I.3.1. Core Changes
Outbound Gateway within Chain
Async Service Activator
Messaging Annotation Support changes
I.3.2. Mail Changes
Customizable User Flag
Mail Message Mapping
I.3.3. JMS Changes
Header Mapper
Async Gateway
I.3.4. Aggregator Changes
I.3.5. TCP/UDP Changes
Events
Stream Deserializers
TCP Message Mapper
I.3.6. File Changes
Destination Directory Creation
Buffer Size
Appending and Flushing
Preserving Timestamps
Splitter Changes
File Filters
I.3.7. AMQP Changes
Content Type Message Converter
Headers for Delayed Message Handling
AMQP-Backed Channels
I.3.8. Redis Changes
List Push/Pop Direction
Queue Inbound Gateway Default Serializer
I.3.9. HTTP Changes
I.3.10. SFTP Changes
Factory Bean
chmod
I.3.11. FTP Changes
Session Changes
I.3.12. Router Changes
I.3.13. Header Mapping
General
AMQP Header Mapping
I.3.14. Groovy Scripts
I.3.15. @InboundChannelAdapter
I.3.16. XMPP changes
I.3.17. WireTap Late Binding
I.3.18. ChannelMessageStoreQueryProvider
I.3.19. WebSocket Changes
I.4. Changes between 4.1 and 4.2
I.5. New Components
I.5.1. Major Management/JMX Rework
I.5.2. MongoDB Metadata Store
I.5.3. SecuredChannel Annotation
I.5.4. SecurityContext Propagation
I.5.5. FileSplitter
I.5.6. Zookeeper Support
I.5.7. Thread Barrier
I.5.8. STOMP Support
I.5.9. Codec
I.5.10. Message PreparedStatement Setter
I.6. General Changes
I.6.1. Wire Tap
I.6.2. File Changes
Appending New Lines
Ignoring Hidden Files
Writing InputStream Payloads
HeadDirectoryScanner
Last Modified Filter
WatchService Directory Scanner
Persistent File List Filter Changes
I.6.3. Class Package Change
I.6.4. TCP Changes
TCP Serializers
Server Socket Exceptions
TCP Server Port
TCP Gateway Remote Timeout
TCP SSLSession Available for Header Mapping
TCP Events
I.6.5. @InboundChannelAdapter
I.6.6. API Changes
I.6.7. JMS Changes
Reply Listener Lazy Initialization
Conversion Errors in Message-Driven Endpoints
Default Acknowledge Mode
Shared Subscriptions
I.6.8. Conditional Pollers
I.6.9. AMQP Changes
Publisher Confirms
Correlation Data
The Inbound Gateway properties
I.6.10. XPath Splitter Improvements
I.6.11. HTTP Changes
CORS
Inbound Gateway Timeout
Form Data
I.6.12. Gateway Changes
Gateway Methods can Return CompletableFuture<?>
MessagingGateway Annotation
I.6.13. Aggregator Changes
Aggregator Performance
Output Message Group Processor
I.6.14. (S)FTP Changes
Inbound channel adapters
Gateway Partial Results
Delegating Session Factory
Default Sftp Session Factory
Message Session Callback
I.6.15. Websocket Changes
I.6.16. Application Event Adapters changes
I.7. Changes between 4.0 and 4.1
I.7.1. New Components
Promise<?> Gateway
WebSocket support
Scatter-Gather EIP pattern
Routing Slip Pattern
Idempotent Receiver Pattern
BoonJsonObjectMapper
Redis Queue Gateways
PollSkipAdvice
I.7.2. General Changes
AMQP Inbound Endpoints, Channel
AMQP Outbound Endpoints
SimpleMessageStore
Web Service Outbound Gateway: encode-uri
Http Inbound Channel Adapter and StatusCode
MQTT Adapter Changes
FTP/SFTP Adapter Changes
Splitter and Iterator
Aggregator
Content Enricher Improvements
Header Channel Registry
Orderly Shutdown
Management for RecipientListRouter
AbstractHeaderMapper: NON_STANDARD_HEADERS token
AMQP Channels: template-channel-transacted
Syslog Adapter
Async Gateway
Aggregator Advice Chain
Outbound Channel Adapter and Scripts
Resequencer Changes
Optional POJO method parameter
QueueChannel: backed Queue type
ChannelInterceptor Changes
IMAP PEEK
I.8. Changes between 3.0 and 4.0
I.8.1. New Components
MQTT Channel Adapters
@EnableIntegration
@IntegrationComponentScan
@EnableMessageHistory
@MessagingGateway
Spring Boot @EnableAutoConfiguration
@GlobalChannelInterceptor
@IntegrationConverter
@EnablePublisher
Redis Channel Message Stores
MongodDB Channel Message Store
@EnableIntegrationMBeanExport
ChannelSecurityInterceptorFactoryBean
Redis Command Gateway
RedisLockRegistry and GemfireLockRegistry
@Poller
@InboundChannelAdapter and SmartLifecycle for Annotated Endpoints
Twitter Search Outbound Gateway
Gemfire Metadata Store
@BridgeFrom and @BridgeTo Annotations
Meta Messaging Annotations
I.8.2. General Changes
Requires Spring Framework 4.0
Header Type for XPath Header Enricher
Object To Json Transformer: Node Result
JMS Header Mapping
JMS Outbound Channel Adapter
JMS Inbound Channel Adapter
Datatype Channels
Simpler Retry Advice Configuration
Correlation Endpoint: Time-based Release Strategy
Redis Metadata Store
JdbcChannelMessageStore and PriorityChannel
AMQP Endpoints Delivery Mode
FTP Timeouts
Twitter: StatusUpdatingMessageHandler
JPA Retrieving Gateway: id-expression
TCP Deserialization Events
Messaging Annotations on @Bean Definitions
I.9. Changes Between 2.2 and 3.0
I.9.1. New Components
HTTP Request Mapping
Spring Expression Language (SpEL) Configuration
SpEL Functions Support
SpEL PropertyAccessors Support
Redis: New Components
Header Channel Registry
MongoDB support: New ConfigurableMongoDbMessageStore
Syslog Support
Tail Support
JMX Support
TCP/IP Connection Events and Connection Management
Inbound Channel Adapter Script Support
Content Enricher: Headers Enrichment Support
I.9.2. General Changes
Message ID Generation
<gateway> Changes
HTTP Endpoint Changes
Jackson Support (JSON)
Chain Elements id Attribute
Aggregator empty-group-min-timeout property
Persistent File List Filters (file, (S)FTP)
Scripting Support: Variables Changes
Direct Channel Load Balancing configuration
PublishSubscribeChannel Behavior
FTP, SFTP and FTPS Changes
requires-reply Attribute for Outbound Gateways
AMQP Outbound Gateway Header Mapping
Stored Procedure Components Improvements
Web Service Outbound URI Configuration
Redis Adapter Changes
Advising Filters
Advising Endpoints using Annotations
ObjectToStringTransformer Improvements
JPA Support Changes
Delayer: delay expression
JDBC Message Store Improvements
IMAP Idle Connection Exceptions
Message Headers and TCP
JMS Message Driven Channel Adapter
RMI Inbound Gateway
XsltPayloadTransformer
I.10. Changes between 2.1 and 2.2
I.10.1. New Components
RedisStore Inbound and Outbound Channel Adapters
MongoDB Inbound and Outbound Channel Adapters
JPA Endpoints
I.10.2. General Changes
Spring 3.1 Used by Default
Adding Behavior to Endpoints
Transaction Synchronization and Pseudo Transactions
File Adapter - Improved File Overwrite/Append Handling
Reply-Timeout added to more Outbound Gateways
Spring-AMQP 1.1
JDBC Support - Stored Procedures Components
JDBC Support - Outbound Gateway
JDBC Support - Channel-specific Message Store Implementation
Orderly Shutdown
JMS Oubound Gateway Improvements
object-to-json-transformer
HTTP Support
I.11. Changes between 2.0 and 2.1
I.11.1. New Components
JSR-223 Scripting Support
GemFire Support
AMQP Support
MongoDB Support
Redis Support
Support for Spring’s Resource abstraction
Stored Procedure Components
XPath and XML Validating Filter
Payload Enricher
FTP and SFTP Outbound Gateways
FTP Session Caching
I.11.2. Framework Refactoring
Standardizing Router Configuration
XML Schemas updated to 2.1
I.11.3. Source Control Management and Build Infrastructure
Source Code now hosted on Github
Improved Source Code Visibility with Sonar
I.11.4. New Samples
I.12. Changes between 1.0 and 2.0
I.12.1. Spring 3 support
Support for the Spring Expression Language (SpEL)
ConversionService and Converter
TaskScheduler and Trigger
RestTemplate and HttpMessageConverter
I.12.2. Enterprise Integration Pattern Additions
Message History
Message Store
Claim Check
Control Bus
I.12.3. New Channel Adapters and Gateways
TCP/UDP Adapters
Twitter Adapters
XMPP Adapters
FTP/FTPS Adapters
SFTP Adapters
Feed Adapters
I.12.4. Other Additions
Groovy Support
Map Transformers
JSON Transformers
Serialization Transformers
I.12.5. Framework Refactoring
I.12.6. New Source Control Management and Build Infrastructure
I.12.7. New Spring Integration Samples
I.12.8. Spring Tool Suite Visual Editor for Spring Integration