10.1.1 Defining integration flows with XML
Although I’ve avoided using XML configuration in this book, Spring Integration has a long history of integration flows defined in XML. Therefore, I think it’s worthwhile for me to show at least one example of an XML-defined integration flow. The following listing shows how to configure your sample flow in XML.
Listing 10.2 Defining an integration flow with Spring XML configuration
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:int-file="http://www.springframework.org/schema/integration/file"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/integration/file
http://www.springframework.org/schema/integration/file/spring-integration-file.xsd">
<int:channel id="textInChannel" />
<int:transformer id="upperCase"
input-channel="textInChannel"
output-channel="fileWriterChannel"
expression="payload.toUpperCase()" />
<int:channel id="fileWriterChannel" />
<int-file:outbound-channel-adapter id="writer"
channel="fileWriterChannel"
directory="/tmp/sia6/files"
mode="APPEND"
append-new-line="true" />
</beans>Breaking down the XML in listing 10.2, we get the following:
- You configured a channel named
textInChannel. You’ll recognize this as the same channel that’s set as the request channel forFileWriterGateway. When thewriteToFile()method is called onFileWriterGateway, the resulting message is published to this channel. - You configured a transformer that receives messages from
textInChannel. It uses a Spring Expression Language (SpEL) expression to calltoUpperCase()on the message payload. The result of the uppercase operation is then published tofileWriterChannel. - You configured the channel named
fileWriterChannel. This channel serves as the conduit that connects the transformer with the outbound channel adapter. - Finally, you configured an outbound channel adapter using the
int-filenamespace. This XML namespace is provided by Spring Integration’s file module to write files. As you configured it, it receives messages fromfileWriterChanneland writes the message payload to a file whose name is specified in the message’s"file_name"header in thedirectoryspecified in the directory attribute. If the file already exists, the file will be appended with a newline rather than be overwritten.
This flow is illustrated in figure 10.1 using graphical elements styled after those in Enterprise Integration Patterns.
Figure 10.1 The file writer integration flow
The flow comprises five components: a gateway, two channels, a transformer, and a channel adapter. These are just a few of the components that can be assembled into an integration flow. We’ll explore these components and others supported by Spring Integration in section 10.2.
If you want to use XML configuration in a Spring Boot application, you’ll need to import the XML as a resource into the Spring application. The easiest way to do this is to use Spring’s @ImportResource annotation, shown in the next code sample, on one of your application’s Java configuration classes:
@Configuration
@ImportResource("classpath:/filewriter-config.xml")
public class FileWriterIntegrationConfig { ... }Although XML-based configuration has served Spring Integration well, most developers have grown wary of using XML. (And, as I said, I’m avoiding XML configuration in this book.) Let’s set aside those angle brackets and turn our attention to Spring Integration’s Java configuration style.
