コード例 #1
0
        public void GetAccessor()
        {
            var expected = new MessageHeaderAccessor();
            var message  = MessageBuilder <string> .CreateMessage("payload", expected.MessageHeaders);

            Assert.Same(expected, MessageHeaderAccessor.GetAccessor <MessageHeaderAccessor>(message, typeof(MessageHeaderAccessor)));
        }
コード例 #2
0
        public void TestBuildIMessageWithDefaultMutability()
        {
            var accessor = new MessageHeaderAccessor();
            var headers  = accessor.MessageHeaders;
            var message  = MessageBuilder.CreateMessage("foo", headers);

            Assert.Throws <InvalidOperationException>(() => accessor.SetHeader("foo", "bar"));

            Assert.Equal(accessor, MessageHeaderAccessor.GetAccessor(message, typeof(MessageHeaderAccessor)));
        }
コード例 #3
0
        public override IMessage PreSend(IMessage message, IMessageChannel channel)
        {
            var accessor = MessageHeaderAccessor.GetAccessor(message, typeof(MessageHeaderAccessor));

            if (accessor != null && accessor.IsMutable)
            {
                accessor.SetImmutable();
            }

            return(message);
        }
コード例 #4
0
        public virtual IMessage ToMessage(object payload, IMessageHeaders headers = null)
        {
            if (headers != null)
            {
                var accessor = MessageHeaderAccessor.GetAccessor <MessageHeaderAccessor>(headers, typeof(MessageHeaderAccessor));
                if (accessor != null && accessor.IsMutable)
                {
                    return(MessageBuilder <object> .CreateMessage(payload, accessor.MessageHeaders));
                }
            }

            return(MessageBuilder <object> .WithPayload(payload).CopyHeaders(headers).Build());
        }
コード例 #5
0
ファイル: MessageBuilderTest.cs プロジェクト: winhu/Steeltoe
        public void TestBuildIMessageWithMutableHeaders()
        {
            var accessor = new MessageHeaderAccessor();

            accessor.LeaveMutable = true;
            var headers = accessor.MessageHeaders;
            var message = MessageBuilder <string> .CreateMessage("payload", headers);

            accessor.SetHeader("foo", "bar");

            Assert.Equal("bar", headers.Get <string>("foo"));
            Assert.Equal(accessor, MessageHeaderAccessor.GetAccessor <MessageHeaderAccessor>(message, typeof(MessageHeaderAccessor)));
        }
コード例 #6
0
        public void LeaveMutable()
        {
            var accessor = new MessageHeaderAccessor();

            accessor.SetHeader("foo", "bar");
            accessor.LeaveMutable = true;
            var headers = accessor.MessageHeaders;
            var message = MessageBuilder.CreateMessage("payload", headers);

            accessor.SetHeader("foo", "baz");

            Assert.Equal("baz", headers.Get <string>("foo"));
            Assert.Same(accessor, MessageHeaderAccessor.GetAccessor(message, typeof(MessageHeaderAccessor)));
        }
コード例 #7
0
        public void LeaveMutableDefaultBehavior()
        {
            var accessor = new MessageHeaderAccessor();

            accessor.SetHeader("foo", "bar");
            var headers = accessor.MessageHeaders;
            var message = MessageBuilder <string> .CreateMessage("payload", headers);

            Assert.Throws <InvalidOperationException>(() => accessor.LeaveMutable = true);

            Assert.Throws <InvalidOperationException>(() => accessor.SetHeader("foo", "baz"));

            Assert.Equal("bar", headers.Get <string>("foo"));
            Assert.Same(accessor, MessageHeaderAccessor.GetAccessor <MessageHeaderAccessor>(message, typeof(MessageHeaderAccessor)));
        }
コード例 #8
0
        public virtual IMessage ToMessage(object payload, IMessageHeaders headers = null, object conversionHint = null)
        {
            if (!CanConvertTo(payload, headers))
            {
                return(null);
            }

            var payloadToUse = ConvertToInternal(payload, headers, conversionHint);

            if (payloadToUse == null)
            {
                return(null);
            }

            var mimeType = GetDefaultContentType(payloadToUse);

            if (headers != null)
            {
                var accessor = MessageHeaderAccessor.GetAccessor <MessageHeaderAccessor>(headers, typeof(MessageHeaderAccessor));
                if (accessor != null && accessor.IsMutable)
                {
                    if (mimeType != null)
                    {
                        accessor.SetHeaderIfAbsent(MessageHeaders.CONTENT_TYPE, mimeType);
                    }

                    return(MessageBuilder <object> .CreateMessage(payloadToUse, accessor.MessageHeaders));
                }
            }

            var builder = MessageBuilder <object> .WithPayload(payloadToUse);

            if (headers != null)
            {
                builder.CopyHeaders(headers);
            }

            if (mimeType != null)
            {
                builder.SetHeaderIfAbsent(MessageHeaders.CONTENT_TYPE, mimeType);
            }

            return(builder.Build());
        }
コード例 #9
0
        protected virtual IMessage ProcessMessageBeforeSend(IMessage message)
        {
            var messageToSend = message;
            var accessor      = MessageHeaderAccessor.GetAccessor(message, typeof(MessageHeaderAccessor));

            if (accessor != null && accessor.IsMutable)
            {
                accessor.RemoveHeader(_sendTimeoutHeader);
                accessor.RemoveHeader(_receiveTimeoutHeader);
                accessor.SetImmutable();
            }
            else if (message.Headers.ContainsKey(_sendTimeoutHeader) ||
                     message.Headers.ContainsKey(_receiveTimeoutHeader))
            {
                messageToSend = MessageBuilder.FromMessage(message)
                                .SetHeader(_sendTimeoutHeader, null)
                                .SetHeader(_receiveTimeoutHeader, null)
                                .Build();
            }

            return(messageToSend);
        }
コード例 #10
0
        public object ResolveArgument(ParameterInfo parameter, IMessage message)
        {
            var paramType = parameter.ParameterType;

            if (typeof(IDictionary <string, object>).IsAssignableFrom(paramType))
            {
                return(message.Headers);
            }
            else if (typeof(MessageHeaderAccessor) == paramType)
            {
                var accessor = MessageHeaderAccessor.GetAccessor(message, typeof(MessageHeaderAccessor));
                return(accessor != null ? accessor : new MessageHeaderAccessor(message));
            }
            else if (typeof(MessageHeaderAccessor).IsAssignableFrom(paramType))
            {
                var accessor = MessageHeaderAccessor.GetAccessor(message, typeof(MessageHeaderAccessor));
                if (accessor != null && paramType.IsAssignableFrom(accessor.GetType()))
                {
                    return(accessor);
                }
                else
                {
                    var method = ReflectionHelpers.FindMethod(paramType, "Wrap", new Type[] { typeof(IMessage) });
                    if (method == null)
                    {
                        throw new InvalidOperationException("Cannot create accessor of type " + paramType + " for message " + message);
                    }

                    return(ReflectionHelpers.Invoke(method, null, new object[] { message }));
                }
            }
            else
            {
                throw new InvalidOperationException("Unexpected parameter of type " + paramType + " in method " + parameter.Member + ". ");
            }
        }