Skip to Content
Technical Articles

EIPinCPI: Message Router

Previous: Pipes-and-Filters | Index | Next: Content-based Router

This week, we’ll study yet another Message Routing pattern called Message Router.

When do I use this pattern?

A router is a type of a filter in integration patterns. The router, as the name suggests, routes the incoming message to a specified channel based on a condition. The router will not change the message.

Message Router in CPI

Message Router is implemented in CPI using the Router component. The router in CPI can route the message based on XML conditions or Non-XML conditions.

I’ll use the example of routing based on the IDoc Type and demonstrate how to achieve that using XML and Non-XML conditions. Let’s consider that orders are sent to Order Management System (OMS) and deliveries are sent to Delivery System (DS). Let’s use IDoc ORDERS05 and IDoc DELVRY07 for orders and deliveries respectively without any extensions.

XML conditions

When using XML conditions XPath is used to check the condition. In our example of checking the IDoc Type of the message, the XPath ‘//IDOCTYP’ can be checked.

Here’s the configuration of Routing Condition table of the Router ‘Type?’:

Order Route Name Condition Expression Default Route
1 ORDERS05 //IDOCTYP = ‘ORDERS05’ No
2 DELVRY07 //IDOCTYP = ‘DELVRY07’ No
3 Default Yes

Non-XML conditions

The Non-XML conditions are written using Apache Camel’s Simple Language. The step “Is First Chunk?” in Message Sequence pattern blog is also an example of a CPI Router using a Non-XML condition.

Coming back to the example in this blog, the IDoc Type can be checked using the header ‘SapIDocType’ set by the IDoc Sender Adapter.

The integration flow will look exactly the same. However, the configuration of the Routing Condition table of the Router ‘Type?’ is as follows:

Order Route Name Condition Expression Default Route
1 ORDERS05 ${header.SapIDocType} = ‘ORDERS05’ No
2 DELVRY07 ${header.SapIDocType} = ‘DELVRY07’ No
3 Default Yes

Conclusion

The Router is a type of filter that routes the message based on a condition. In CPI, the routing conditions can be written using XPath expression or Apache Camel’s Simple Language using the Router component.

References/Further Readings

Hope this helps,
Bala

Previous: Pipes-and-Filters | Index | Next: Content-based Router

Be the first to leave a comment
You must be Logged on to comment or reply to a post.