Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Spring Integration - Transforming a Header Object to a Payload

DZone's Guide to

Spring Integration - Transforming a Header Object to a Payload

· Integration Zone
Free Resource

Today’s data climate is fast-paced and it’s not slowing down. Here’s why your current integration solution is not enough. Brought to you in partnership with Liaison Technologies.

Moving objects from the Spring Integration header can be done using several mechanisms. Firstly, a transformer construct can be used:

<int:chain input-channel="request-message-retrieval-channel">
  <int:transformer expression="headers.get(T(com.l8mdv.sample.HeaderManagementGateway)

      .REQUEST_PAYLOAD_HEADER_KEY)"/>
</int:chain>

Secondly, the same action can be performed using a Service Activator:

<int:chain input-channel="request-message-retrieval-channel">
  <int:service-activator expression="headers.get(T(com.l8mdv.sample.HeaderManagementGateway)

       .REQUEST_PAYLOAD_HEADER_KEY)"/>
</int:chain>

Here's a claim-check retrieval - notice the configuration option that triggers the Spring Integration framework to remove the object from the message store once it has been retrieved. If a message requires access several times in a flow, the last claim-check-out can be configured in this way in order to clean-up.
 
<int:chain input-channel="claim-check-out-channel">
  <int:transformer
     expression="headers.get('#{T(com.l8mdv.sample.ClaimCheckGateway).CLAIM_CHECK_ID}')"/>

  <int:claim-check-out message-store="simpleMessageStore" 

                       remove-message="true"/>
</int:chain>

Several interesting points arise:

  1. As can be seen here, it's advisable to reference constants for header key values rather than have the header name appearing as literals in several places throughout the code and configuration. On first sight the SpEL expression language may seem hard to fathom but it's worth investing the effort in order to understand it.
  2. Don't forget that when header objects are moved back into Spring Integration payloads, the object remains in the Spring Integration message header. It may be worth clearing the header value away as part of transformation from the header back to the payload in order to maintain a cleaner and clearer Spring Integration message.
  3. The intent should be clear from the configuration, what looks better a Service Activator expression or a Transformer? In my view the transformer conveys a slightly more accurate intent.
  4. Consider using a claim-check integration pattern instead of loading the header. The Spring Integration claim-check uses a referenced message store (and provides a default implementation) that can be house-cleaned automatically by the framework.

Is iPaaS solving the right problems? Not knowing the fundamental difference between iPaaS and iPaaS+ could cost you down the road. Brought to you in partnership with Liaison Technologies.

Topics:

Published at DZone with permission of Matt Vickery, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}