Пример #1
0
        public virtual void HandleMessage(IMessage message)
        {
            var destination = GetDestination(message);

            if (destination == null)
            {
                return;
            }

            var lookupDestination = GetLookupDestination(destination);

            if (lookupDestination == null)
            {
                return;
            }

            var headerAccessor = MessageHeaderAccessor.GetMutableAccessor(message);

            headerAccessor.SetHeader(DestinationPatternsMessageCondition.LOOKUP_DESTINATION_HEADER, lookupDestination);
            headerAccessor.LeaveMutable = true;
            message = MessageBuilder.CreateMessage(message.Payload, headerAccessor.MessageHeaders);

            HandleMessageInternal(message, lookupDestination);
            headerAccessor.SetImmutable();
        }
Пример #2
0
        public void ShouldThrowAnExceptionWhenContentClassIdIsNotPresentWhenClassIdIsContainerType()
        {
            var accessor = MessageHeaderAccessor.GetMutableAccessor(headers);

            accessor.SetHeader(typeMapper.ClassIdFieldName, typeof(List <>).FullName);
            var excep = Assert.Throws <MessageConversionException>(() => typeMapper.ToType(accessor.MessageHeaders));

            Assert.Contains("Could not resolve ", excep.Message);
        }
Пример #3
0
        public void GetMutableAccessorNewInstance()
        {
            IMessage message = MessageBuilder <string> .WithPayload("payload").Build();

            var actual = MessageHeaderAccessor.GetMutableAccessor(message);

            Assert.NotNull(actual);
            Assert.True(actual.IsMutable);
        }
Пример #4
0
        public void GetMutableAccessorNewInstanceMatchingType()
        {
            var      expected = new TestMessageHeaderAccessor();
            IMessage message  = MessageBuilder <string> .CreateMessage("payload", expected.MessageHeaders);

            var actual = MessageHeaderAccessor.GetMutableAccessor(message);

            Assert.NotNull(actual);
            Assert.True(actual.IsMutable);
            Assert.Equal(typeof(TestMessageHeaderAccessor), actual.GetType());
        }
        public void GetMutableAccessorNewInstance()
        {
            var message = MessageBuilder.WithPayload("payload").Build();

            var actual = MessageHeaderAccessor.GetMutableAccessor(message);

            Assert.NotNull(actual);
            Assert.True(actual.IsMutable);

            actual.SetHeader("foo", "bar");
        }
Пример #6
0
        public void ShouldLookInTheContentClassIdFieldNameToFindTheContainerClassIDWhenClassIdIsContainerType()
        {
            var accessor = MessageHeaderAccessor.GetMutableAccessor(headers);

            accessor.SetHeader("contentType", typeof(string).ToString());
            accessor.SetHeader(typeMapper.ClassIdFieldName, typeof(List <>).FullName);
            typeMapper.ContentClassIdFieldName = "contentType";
            var type = typeMapper.ToType(accessor.MessageHeaders);

            Assert.Equal(typeof(List <string>), type);
        }
Пример #7
0
        public void ShouldLookInTheClassIdFieldNameToFindTheClassName()
        {
            var accessor = MessageHeaderAccessor.GetMutableAccessor(headers);

            accessor.SetHeader("type", "System.String");
            typeMapper.ClassIdFieldName = "type";

            var type = typeMapper.ToType(accessor.MessageHeaders);

            Assert.Equal(typeof(string), type);
        }
Пример #8
0
        public void ShouldThrowAnExceptionWhenKeyClassIdIsNotPresentWhenClassIdIsAMap()
        {
            var accessor = MessageHeaderAccessor.GetMutableAccessor(headers);

            accessor.SetHeader(typeMapper.ClassIdFieldName, typeof(Dictionary <,>).FullName);
            accessor.SetHeader(typeMapper.KeyClassIdFieldName, typeof(string).ToString());

            var excep = Assert.Throws <MessageConversionException>(() => typeMapper.ToType(accessor.MessageHeaders));

            Assert.Contains("Could not resolve ", excep.Message);
        }
Пример #9
0
        public void GetMutableAccessorSameInstance()
        {
            var expected = new TestMessageHeaderAccessor();

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

            var actual = MessageHeaderAccessor.GetMutableAccessor(message);

            Assert.NotNull(actual);
            Assert.True(actual.IsMutable);
            Assert.Same(expected, actual);
        }
Пример #10
0
        public void ShouldLookInTheValueClassIdFieldNameToFindTheValueClassIDWhenClassIdIsAMap()
        {
            var accessor = MessageHeaderAccessor.GetMutableAccessor(headers);

            accessor.SetHeader("keyType", typeof(int).ToString());
            accessor.SetHeader(typeMapper.ContentClassIdFieldName, typeof(string).ToString());
            accessor.SetHeader(typeMapper.ClassIdFieldName, typeof(Dictionary <,>).FullName);
            typeMapper.KeyClassIdFieldName = "keyType";

            var type = typeMapper.ToType(accessor.MessageHeaders);

            Assert.Equal(typeof(Dictionary <int, string>), type);
        }
Пример #11
0
        protected virtual void AddHeader(IMessageHeaders headers, string headerName, Type clazz)
        {
            var accessor = MessageHeaderAccessor.GetMutableAccessor(headers);

            if (_classIdMapping.ContainsKey(clazz))
            {
                accessor.SetHeader(headerName, _classIdMapping[clazz]);
            }
            else
            {
                accessor.SetHeader(headerName, GetClassName(clazz));
            }
        }
Пример #12
0
        public void ShouldUseTheClassProvidedByTheLookupMapIfPresent()
        {
            var accessor = MessageHeaderAccessor.GetMutableAccessor(headers);

            accessor.SetHeader("__TypeId__", "trade");
            typeMapper.SetIdClassMapping(new Dictionary <string, Type>()
            {
                { "trade", typeof(SimpleTrade) }
            });

            var type = typeMapper.ToType(accessor.MessageHeaders);

            Assert.Equal(typeof(SimpleTrade), type);
        }
        public void GetMutableAccessorSameInstance()
        {
            var expected = new TestMessageHeaderAccessor
            {
                LeaveMutable = true
            };
            var message = MessageBuilder.CreateMessage("payload", expected.MessageHeaders);

            var actual = MessageHeaderAccessor.GetMutableAccessor(message);

            Assert.NotNull(actual);
            Assert.True(actual.IsMutable);
            Assert.Same(expected, actual);

            actual.SetHeader("foo", "bar");
            Assert.Equal("bar", message.Headers.Get <string>("foo"));
        }
Пример #14
0
        public void ShouldUseTheContentClassProvidedByTheLookupMapIfPresent()
        {
            var accessor = MessageHeaderAccessor.GetMutableAccessor(headers);

            accessor.SetHeader(typeMapper.ClassIdFieldName, typeof(List <>).FullName);
            accessor.SetHeader("__ContentTypeId__", "trade");
            var mapping = new Dictionary <string, Type>()
            {
                { "trade", typeof(SimpleTrade) }
            };

            mapping.Add(typeMapper.ClassIdFieldName, typeof(List <>));
            typeMapper.SetIdClassMapping(mapping);

            var type = typeMapper.ToType(accessor.MessageHeaders);

            Assert.Equal(typeof(List <SimpleTrade>), type);
        }
Пример #15
0
        protected override object DoTransform(IMessage message)
        {
            var payload     = BuildJsonPayload(message.Payload);
            var accessor    = MessageHeaderAccessor.GetMutableAccessor(message);
            var contentType = accessor.ContentType;

            if (string.IsNullOrEmpty(contentType))
            {
                accessor.ContentType = ContentType;
            }

            var headers = accessor.MessageHeaders;

            _defaultTypeMapper.FromType(message.Payload.GetType(), headers);
            if (ResultType == typeof(string))
            {
                return(MessageBuilderFactory.WithPayload <string>((string)payload).CopyHeaders(headers).Build());
            }
            else
            {
                return(MessageBuilderFactory.WithPayload <byte[]>((byte[])payload).CopyHeaders(headers).Build());
            }
        }