private IMessageChannel ResolveErrorChannel(IMessage failedMessage) { if (_defaultErrorChannel == null && _channelResolver != null) { _defaultErrorChannel = _channelResolver.ResolveChannelName(IntegrationContextUtils.ErrorChannelObjectName); } if (failedMessage == null || failedMessage.Headers.ErrorChannel == null) { return(_defaultErrorChannel); } IMessageChannel errorChannel = failedMessage.Headers.ErrorChannel as IMessageChannel; if (errorChannel != null) { return(errorChannel); } string errorChannelName = failedMessage.Headers.ErrorChannel as string; if (errorChannelName == null) { throw new ArgumentException("Unsupported error channel header type. Expected IMessageChannel or string"); } if (_channelResolver == null) { throw new ApplicationException("channelResolver must not be null"); } return(_channelResolver.ResolveChannelName(errorChannelName)); }
private void AddChannel(object channelOrName, ICollection <IMessageChannel> channels) { if (channelOrName == null) { return; } if (channelOrName is IMessageChannel) { channels.Add((IMessageChannel)channelOrName); } else if (channelOrName is string) { string channelName = (string)channelOrName; AssertUtils.State(_channelResolver != null, "unable to resolve channel names, no ChannelResolver available"); IMessageChannel channel = _channelResolver.ResolveChannelName(channelName); if (channel == null) { throw new MessagingException("failed to resolve channel name '" + channelName + "'"); } channels.Add(channel); } else { throw new MessagingException("unsupported return type for router [" + channelOrName.GetType() + "]"); } }
private IMessageChannel ResolveReplyChannel(IMessage requestMessage) { IMessageChannel replyChannel = OutputChannel; if (replyChannel == null) { object replyChannelHeader = requestMessage.Headers.ReplyChannel; if (replyChannelHeader != null) { if (replyChannelHeader is IMessageChannel) { replyChannel = (IMessageChannel)replyChannelHeader; } else if (replyChannelHeader is string) { if (_channelResolver == null) { throw new InvalidOperationException("ChannelResolver is required for resolving a reply channel by name"); } replyChannel = _channelResolver.ResolveChannelName((string)replyChannelHeader); } else { throw new ChannelResolutionException("expected a IMessageChannel or string for 'replyChannel', but type is [" + replyChannelHeader.GetType() + "]"); } } } if (replyChannel == null) { throw new ChannelResolutionException("unable to resolve reply channel for message: " + requestMessage); } return(replyChannel); }
protected override ICollection <IMessageChannel> DetermineTargetChannels(IMessage message) { AfterPropertiesSet(); ICollection <IMessageChannel> channels = new List <IMessageChannel>(); string[] channelNames = DetermineTargetChannelNames(message); if (channelNames == null) { return(null); } foreach (string channelName in channelNames) { if (channelName == null) { continue; } if (_channelResolver == null) { throw new InvalidOperationException("unable to resolve channel names, no ChannelResolver available"); } string name = channelName; if (_prefix != null) { name = _prefix + name; } if (_suffix != null) { name = name + _suffix; } IMessageChannel channel = _channelResolver.ResolveChannelName(name); if (channel == null) { throw new MessagingException(message, "failed to resolve channel name '" + name + "'"); } channels.Add(channel); } return(channels); }