Class ExpressionEvaluatingRoutingSlipRouteStrategy

java.lang.Object
org.springframework.integration.routingslip.ExpressionEvaluatingRoutingSlipRouteStrategy
All Implemented Interfaces:
Aware, BeanFactoryAware, InitializingBean, RoutingSlipRouteStrategy

public class ExpressionEvaluatingRoutingSlipRouteStrategy extends Object implements RoutingSlipRouteStrategy, BeanFactoryAware, InitializingBean
The Expression based RoutingSlipRouteStrategy implementation. The requestMessage and reply object are wrapped to the ExpressionEvaluatingRoutingSlipRouteStrategy.RequestAndReply which is used as a EvaluationContext rootObject. This is necessary to avoid a creation of a new EvaluationContext on each invocation when additional parameter can be populated as expression variable, but EvaluationContext isn't thread-safe.

The ExpressionEvaluatingRoutingSlipRouteStrategy can be used directly as a regular bean in the ApplicationContext and its beanName can be used from routingSlip header configuration.

Usage of ExpressionEvaluatingRoutingSlipRouteStrategy as a regular bean definition is a recommended way in case of distributed environment, when message with routingSlip header can be sent across the network. One of this case is a QueueChannel with persistent MessageStore, when ExpressionEvaluatingRoutingSlipRouteStrategy instance as a header value will be non-serializable.

This class is used internally from RoutingSlipHeaderValueMessageProcessor to populate routingSlip header value item, when the value from configuration contains expression definitions:


<header-enricher>
    <routing-slip
          value="channel1; @routingSlipPojo.get(request, reply); request.headers[foo]"/>
</header-enricher>

Since:
4.1
Author:
Artem Bilan, Gary Russell