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); }
private void doProduceOutput(final Message<?> requestMessage, final MessageHeaders requestHeaders, Object reply, Object replyChannel) { if (this.async && (reply instanceof ListenableFuture<?> || reply instanceof Publisher<?>)) { if (reply instanceof ListenableFuture<?> || !(getOutputChannel() instanceof ReactiveStreamsSubscribableChannel)) { asyncNonReactiveReply(requestMessage, requestHeaders, reply, replyChannel); } else { ((ReactiveStreamsSubscribableChannel) getOutputChannel()) .subscribeTo( Flux.from((Publisher<?>) reply) .map(result -> createOutputMessage(result, requestHeaders))); } } else { sendOutput(createOutputMessage(reply, requestHeaders), replyChannel, false); } }
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); }
MessageChannel outChannel = getOutputChannel(); if (!useArgChannel && outChannel != null) { replyChannel = outChannel;
private void doProduceOutput(final Message<?> requestMessage, final MessageHeaders requestHeaders, Object reply, Object replyChannel) { if (this.async && (reply instanceof ListenableFuture<?> || reply instanceof Publisher<?>)) { if (reply instanceof ListenableFuture<?> || !(getOutputChannel() instanceof ReactiveStreamsSubscribableChannel)) { asyncNonReactiveReply(requestMessage, requestHeaders, reply, replyChannel); } else { ((ReactiveStreamsSubscribableChannel) getOutputChannel()) .subscribeTo( Flux.from((Publisher<?>) reply) .map(result -> createOutputMessage(result, requestHeaders))); } } else { sendOutput(createOutputMessage(reply, requestHeaders), replyChannel, false); } }
MessageChannel outChannel = getOutputChannel(); if (!useArgChannel && outChannel != null) { replyChannel = outChannel;