public class ExpressionEvaluatingRoutingSlipRouteStrategy extends java.lang.Object implements RoutingSlipRouteStrategy, org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.InitializingBean
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>
| Modifier and Type | Class and Description |
|---|---|
static class |
ExpressionEvaluatingRoutingSlipRouteStrategy.RequestAndReply |
| Constructor and Description |
|---|
ExpressionEvaluatingRoutingSlipRouteStrategy(org.springframework.expression.Expression expression) |
ExpressionEvaluatingRoutingSlipRouteStrategy(java.lang.String expression) |
| Modifier and Type | Method and Description |
|---|---|
void |
afterPropertiesSet() |
java.lang.Object |
getNextPath(org.springframework.messaging.Message<?> requestMessage,
java.lang.Object reply)
Get the next path for this routing slip.
|
void |
setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory) |
void |
setIntegrationEvaluationContext(org.springframework.expression.EvaluationContext evaluationContext) |
java.lang.String |
toString() |
public ExpressionEvaluatingRoutingSlipRouteStrategy(java.lang.String expression)
public ExpressionEvaluatingRoutingSlipRouteStrategy(org.springframework.expression.Expression expression)
public void setIntegrationEvaluationContext(org.springframework.expression.EvaluationContext evaluationContext)
public void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
throws org.springframework.beans.BeansException
setBeanFactory in interface org.springframework.beans.factory.BeanFactoryAwareorg.springframework.beans.BeansExceptionpublic void afterPropertiesSet()
throws java.lang.Exception
afterPropertiesSet in interface org.springframework.beans.factory.InitializingBeanjava.lang.Exceptionpublic java.lang.Object getNextPath(org.springframework.messaging.Message<?> requestMessage,
java.lang.Object reply)
RoutingSlipRouteStrategygetNextPath in interface RoutingSlipRouteStrategyrequestMessage - the request message.reply - the reply - depending on context, this may be a user-level domain
object, a Message or a AbstractIntegrationMessageBuilder.RoutingSlipRouteStrategy.public java.lang.String toString()
toString in class java.lang.Object