There's often a need to temporarily store transient messages during design of Spring Integration flows - several different mechanisms are available in the toolkit.
It's pretty straight forward to take a message, use an SI header enricher construct and place the message in the header using a SpEL expression - in fact one for the header key name and one for the payload extraction.
The following SI flow demonstrates an example of how to do just that :
This example can be executed by implementing a gateway as follows:
and then running a test such as this one:
For full source code and configuration, see the header-management maven module under git://github.com/L8MDV/l8mdv-si-samples.git
The following SI flow demonstrates an example of how to do just that :
<?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" 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-2.1.xsd">
<int:gateway id="headerManagementGateway"
service-interface="com.l8mdv.sample.HeaderManagementGateway"/> <int:chain input-channel="request-message-storage-channel" output-channel="request-message-retrieval-channel"> <int:header-enricher> <int:header name="#{T(com.l8mdv.sample.HeaderManagementGateway)
.REQUEST_PAYLOAD_HEADER_KEY}" expression="getPayload()"/> </int:header-enricher> </int:chain> <int:chain input-channel="request-message-retrieval-channel"> <int:transformer expression="headers.get(T(com.l8mdv.sample.HeaderManagementGateway)
.REQUEST_PAYLOAD_HEADER_KEY)"/>
</int:chain> </beans>
This example can be executed by implementing a gateway as follows:
package com.l8mdv.sample; import org.springframework.integration.Message; import org.springframework.integration.annotation.Gateway; public interface HeaderManagementGateway { public static final String REQUEST_PAYLOAD_HEADER_KEY = "REQUEST_PAYLOAD_HEADER_KEY"; @Gateway (requestChannel = "request-message-storage-channel") public Message<String> send(Message<String> message); }
and then running a test such as this one:
package com.l8mdv.sample; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.integration.Message; import org.springframework.integration.support.MessageBuilder; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import static com.l8mdv.sample.HeaderManagementGateway.REQUEST_PAYLOAD_HEADER_KEY; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:META-INF/spring/header-management.xml"}) public class HeaderManagementIntegrationTest { @Autowired HeaderManagementGateway headerManagementGateway; @Test public void locatePayloadInHeader() { String payload = "Sample test message."; Message<String> message = MessageBuilder.withPayload(payload).build(); Message<String> response = headerManagementGateway.send(message); Assert.assertTrue(response.getHeaders().get(REQUEST_PAYLOAD_HEADER_KEY).equals(payload)); } @Test public void locateTransformedPayload() { String payload = "Sample test message."; Message<String> message = MessageBuilder.withPayload(payload).build(); Message<String> response = headerManagementGateway.send(message); Assert.assertTrue(response.getPayload().contains(payload)); } }
For full source code and configuration, see the header-management maven module under git://github.com/L8MDV/l8mdv-si-samples.git
No comments:
Post a Comment