diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProducingHandler.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProducingHandler.java
index f92b3f3153..577c485fd2 100644
--- a/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProducingHandler.java
+++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProducingHandler.java
@@ -196,8 +196,8 @@ public abstract class AbstractMessageProducingHandler extends AbstractMessageHan
return routingSlipPathValue;
}
else {
- String nextPath = ((RoutingSlipRouteStrategy) routingSlipPathValue).getNextPath(requestMessage, reply);
- if (StringUtils.hasText(nextPath)) {
+ Object nextPath = ((RoutingSlipRouteStrategy) routingSlipPathValue).getNextPath(requestMessage, reply);
+ if (nextPath != null && (!(nextPath instanceof String) || StringUtils.hasText((String) nextPath))) {
return nextPath;
}
else {
diff --git a/spring-integration-core/src/main/java/org/springframework/integration/routingslip/ExpressionEvaluatingRoutingSlipRouteStrategy.java b/spring-integration-core/src/main/java/org/springframework/integration/routingslip/ExpressionEvaluatingRoutingSlipRouteStrategy.java
index c743e40d53..05fb2baf65 100644
--- a/spring-integration-core/src/main/java/org/springframework/integration/routingslip/ExpressionEvaluatingRoutingSlipRouteStrategy.java
+++ b/spring-integration-core/src/main/java/org/springframework/integration/routingslip/ExpressionEvaluatingRoutingSlipRouteStrategy.java
@@ -79,7 +79,7 @@ public class ExpressionEvaluatingRoutingSlipRouteStrategy
}
@Override
- public String getNextPath(Message> requestMessage, Object reply) {
+ public Object getNextPath(Message> requestMessage, Object reply) {
return this.expression.getValue(this.evaluationContext, new RequestAndReply(requestMessage, reply),
String.class);
}
diff --git a/spring-integration-core/src/main/java/org/springframework/integration/routingslip/RoutingSlipRouteStrategy.java b/spring-integration-core/src/main/java/org/springframework/integration/routingslip/RoutingSlipRouteStrategy.java
index 7995550be0..95d36e13c9 100644
--- a/spring-integration-core/src/main/java/org/springframework/integration/routingslip/RoutingSlipRouteStrategy.java
+++ b/spring-integration-core/src/main/java/org/springframework/integration/routingslip/RoutingSlipRouteStrategy.java
@@ -20,12 +20,15 @@ import org.springframework.messaging.Message;
/**
* The {@code RoutingSlip} strategy to determine the next {@code replyChannel}.
+ *
+ * This strategy is called repeatedly until null or an empty String is returned.
*
* @author Artem Bilan
* @since 4.1
+ * @see org.springframework.integration.handler.AbstractMessageProducingHandler
*/
public interface RoutingSlipRouteStrategy {
- String getNextPath(Message> requestMessage, Object reply);
+ Object getNextPath(Message> requestMessage, Object reply);
}
diff --git a/spring-integration-core/src/main/java/org/springframework/integration/transformer/support/RoutingSlipHeaderValueMessageProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/transformer/support/RoutingSlipHeaderValueMessageProcessor.java
index aace9f599f..dbf3a4f090 100644
--- a/spring-integration-core/src/main/java/org/springframework/integration/transformer/support/RoutingSlipHeaderValueMessageProcessor.java
+++ b/spring-integration-core/src/main/java/org/springframework/integration/transformer/support/RoutingSlipHeaderValueMessageProcessor.java
@@ -48,7 +48,7 @@ public class RoutingSlipHeaderValueMessageProcessor
extends AbstractHeaderValueMessageProcessor