protected void produceOutput(Object replyArg, final Message<?> requestMessage) { final MessageHeaders requestHeaders = requestMessage.getHeaders(); Object reply = replyArg; Object replyChannel = null; if (getOutputChannel() == null) { Map<?, ?> routingSlipHeader = requestHeaders.get(IntegrationMessageHeaderAccessor.ROUTING_SLIP, Map.class); if (routingSlipHeader != null) { Assert.isTrue(routingSlipHeader.size() == 1, "The RoutingSlip header value must be a SingletonMap"); Object key = routingSlipHeader.keySet().iterator().next(); Object value = routingSlipHeader.values().iterator().next(); Assert.isInstanceOf(List.class, key, "The RoutingSlip key must be List"); Assert.isInstanceOf(Integer.class, value, "The RoutingSlip value must be Integer"); List<?> routingSlip = (List<?>) key; AtomicInteger routingSlipIndex = new AtomicInteger((Integer) value); replyChannel = getOutputChannelFromRoutingSlip(reply, requestMessage, routingSlip, routingSlipIndex); if (replyChannel != null) { reply = addRoutingSlipHeader(reply, routingSlip, routingSlipIndex); } } if (replyChannel == null) { replyChannel = requestHeaders.getReplyChannel(); if (replyChannel == null && reply instanceof Message) { replyChannel = ((Message<?>) reply).getHeaders().getReplyChannel(); } } } doProduceOutput(requestMessage, requestHeaders, reply, replyChannel); }
protected void produceOutput(Object replyArg, final Message<?> requestMessage) { final MessageHeaders requestHeaders = requestMessage.getHeaders(); Object reply = replyArg; Object replyChannel = null; if (getOutputChannel() == null) { Map<?, ?> routingSlipHeader = requestHeaders.get(IntegrationMessageHeaderAccessor.ROUTING_SLIP, Map.class); if (routingSlipHeader != null) { Assert.isTrue(routingSlipHeader.size() == 1, "The RoutingSlip header value must be a SingletonMap"); Object key = routingSlipHeader.keySet().iterator().next(); Object value = routingSlipHeader.values().iterator().next(); Assert.isInstanceOf(List.class, key, "The RoutingSlip key must be List"); Assert.isInstanceOf(Integer.class, value, "The RoutingSlip value must be Integer"); List<?> routingSlip = (List<?>) key; AtomicInteger routingSlipIndex = new AtomicInteger((Integer) value); replyChannel = getOutputChannelFromRoutingSlip(reply, requestMessage, routingSlip, routingSlipIndex); if (replyChannel != null) { reply = addRoutingSlipHeader(reply, routingSlip, routingSlipIndex); } } if (replyChannel == null) { replyChannel = requestHeaders.getReplyChannel(); if (replyChannel == null && reply instanceof Message) { replyChannel = ((Message<?>) reply).getHeaders().getReplyChannel(); } } } doProduceOutput(requestMessage, requestHeaders, reply, replyChannel); }