public void TestCorrelationIdPassedIfAvailable()
 {
     object correlationId = "123-ABC";
     IMessage message = MessageBuilder.WithPayload("test").SetCorrelationId(correlationId).Build();
     DirectChannel inputChannel = new DirectChannel();
     QueueChannel outputChannel = new QueueChannel(1);
     ServiceActivatingHandler serviceActivator = new ServiceActivatingHandler(new TestBean(), "UpperCase");
     serviceActivator.OutputChannel = outputChannel;
     EventDrivenConsumer endpoint = new EventDrivenConsumer(inputChannel, serviceActivator);
     endpoint.Start();
     Assert.IsTrue(inputChannel.Send(message));
     IMessage reply = outputChannel.Receive(TimeSpan.Zero);
     Assert.That(reply.Headers.CorrelationId, Is.EqualTo(correlationId));
 }
        private void RegisterReplyMessageCorrelator()
        {
            lock(_replyMessageCorrelatorMonitor) {
                if(_replyMessageCorrelator != null) {
                    return;
                }
                AbstractEndpoint correlator = null;
                IMessageHandler handler = new LocalReplyProducingMessageHandler();

                if(_replyChannel is ISubscribableChannel) {
                    correlator = new EventDrivenConsumer((ISubscribableChannel)_replyChannel, handler);
                }
                else if(_replyChannel is IPollableChannel) {
                    PollingConsumer endpoint = new PollingConsumer(
                            (IPollableChannel)_replyChannel, handler);
                    endpoint.Trigger = new IntervalTrigger(TimeSpan.FromMilliseconds(10));
                    endpoint.ObjectFactory = ObjectFactory;
                    endpoint.AfterPropertiesSet();
                    correlator = endpoint;
                }
                if(IsRunning) {
                    if(correlator == null)
                        throw new InvalidOperationException("correlator must not be null");

                    ((ILifecycle)correlator).Start();
                }
                _replyMessageCorrelator = correlator;
            }
        }
 private void ConfigureChain()
 {
     DirectChannel channel = null;
     IList<IMessageHandler> handlers = _handlers;
     for(int i = 0; i < handlers.Count; i++) {
         bool first = (i == 0);
         bool last = (i == handlers.Count - 1);
         IMessageHandler handler = handlers[i];
         if(!first) {
             EventDrivenConsumer consumer = new EventDrivenConsumer(channel, handler);
             consumer.Start();
         }
         if(!last) {
             if(!(handler is AbstractReplyProducingMessageHandler))
                 throw new ArgumentException("All handlers except for the last one in the chain must implement " + typeof(AbstractReplyProducingMessageHandler).Name);
             channel = new DirectChannel();
             channel.ObjectName = "_" + this + ".channel#" + i;
             ((AbstractReplyProducingMessageHandler)handler).OutputChannel = channel;
         }
         else if(handler is AbstractReplyProducingMessageHandler) {
             IMessageChannel replyChannel = (_outputChannel != null) ? _outputChannel : new ReplyForwardingMessageChannel(this);
             ((AbstractReplyProducingMessageHandler)handler).OutputChannel = replyChannel;
         }
         else {
             if(_outputChannel == null)
                 throw new ArgumentException("An output channel was provided, but the final handler in the chain is not an "
                         + "instance of [" + typeof(AbstractReplyProducingMessageHandler).Name + "]");
         }
     }
 }
 public void TestCorrelationNotCopiedFromRequestMessgeIdIfAlreadySetByHandler()
 {
     IMessage message = new StringMessage("test");
     DirectChannel inputChannel = new DirectChannel();
     QueueChannel outputChannel = new QueueChannel(1);
     ServiceActivatingHandler serviceActivator = new ServiceActivatingHandler(new TestBean(), "CreateMessage");
     serviceActivator.OutputChannel = outputChannel;
     EventDrivenConsumer endpoint = new EventDrivenConsumer(inputChannel, serviceActivator);
     endpoint.Start();
     Assert.IsTrue(inputChannel.Send(message));
     IMessage reply = outputChannel.Receive(TimeSpan.Zero);
     Assert.That(reply.Headers.CorrelationId, Is.EqualTo("456-XYZ"));
 }