Skip to content

Commit 19a87ca

Browse files
authored
Exception in consumer not propagating to producer (#1030)
* Exception in consumer not propagating to producer * Fix null reference
1 parent 310dbc2 commit 19a87ca

File tree

3 files changed

+26
-12
lines changed

3 files changed

+26
-12
lines changed

Source/EasyNetQ.Tests/DefaultMessageSerializationStrategyTests.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,24 @@ public void When_using_the_default_serialization_strategy_messages_are_correctly
8484
Assert.Equal(((Message<MyMessage>)deserializedMessage).Body.Text, message.Body.Text);
8585
}
8686

87+
[Fact]
88+
public void When_using_the_default_serialization_strategy_messages_are_correctly_round_tripped_when_null()
89+
{
90+
var typeNameSerializer = new DefaultTypeNameSerializer();
91+
var serializer = new JsonSerializer();
92+
const string correlationId = "CorrelationId";
93+
94+
var serializationStrategy = new DefaultMessageSerializationStrategy(typeNameSerializer, serializer, new StaticCorrelationIdGenerationStrategy(correlationId));
95+
96+
var message = new Message<MyMessage>();
97+
var serializedMessage = serializationStrategy.SerializeMessage(message);
98+
var deserializedMessage = serializationStrategy.DeserializeMessage(serializedMessage.Properties, serializedMessage.Body);
99+
100+
Assert.Equal(deserializedMessage.MessageType, message.MessageType);
101+
Assert.Null(((Message<MyMessage>)deserializedMessage).Body);
102+
}
103+
104+
87105
private void AssertMessageSerializedCorrectly(SerializedMessage message, byte[] expectedBody, string expectedMessageType, string expectedCorrelationId)
88106
{
89107
Assert.Equal(message.Body, expectedBody); //, "Serialized message body does not match expected value");
@@ -120,4 +138,4 @@ private static DefaultMessageSerializationStrategy CreateDeserializationStrategy
120138
return new DefaultMessageSerializationStrategy(typeNameSerializer, serializer, new StaticCorrelationIdGenerationStrategy(correlationId));
121139
}
122140
}
123-
}
141+
}

Source/EasyNetQ/IMessage.cs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,19 @@ public interface IMessage
2929

3030
public class Message<T> : IMessage<T>
3131
{
32-
public MessageProperties Properties { get; private set; }
32+
public MessageProperties Properties { get; }
3333
public Type MessageType { get; }
3434
public T Body { get; }
3535

3636
public object GetBody() { return Body; }
3737

3838
public Message(T body)
3939
{
40-
Preconditions.CheckNotNull(body, "body");
4140
Body = body;
4241
Properties = new MessageProperties();
43-
MessageType = body.GetType();
42+
MessageType = body != null ? body.GetType() : typeof(T);
4443
}
45-
44+
4645
public Message()
4746
{
4847
Body = default;
@@ -52,11 +51,9 @@ public Message()
5251

5352
public Message(T body, MessageProperties properties)
5453
{
55-
Preconditions.CheckNotNull(body, "body");
56-
Preconditions.CheckNotNull(properties, "properties");
5754
Body = body;
5855
Properties = properties;
59-
MessageType = body.GetType();
56+
MessageType = body != null ? body.GetType() : typeof(T);
6057
}
6158
}
62-
}
59+
}

Source/EasyNetQ/MessageFactory.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace EasyNetQ
55
{
66
/// <summary>
77
/// Creates a generic <see cref="IMessage{T}"/> and returns it casted as <see cref="IMessage"/>
8-
/// so it can be used in scenarios where we only have a runtime <see cref="Type"/> available.
8+
/// so it can be used in scenarios where we only have a runtime <see cref="Type"/> available.
99
/// </summary>
1010
public static class MessageFactory
1111
{
@@ -23,11 +23,10 @@ public static IMessage CreateInstance(Type messageType, object body)
2323
public static IMessage CreateInstance(Type messageType, object body, MessageProperties properties)
2424
{
2525
Preconditions.CheckNotNull(messageType, "messageType");
26-
Preconditions.CheckNotNull(body, "body");
2726
Preconditions.CheckNotNull(properties, "properties");
2827

2928
var genericType = genericMessageTypesMap.GetOrAdd(messageType, t => typeof(Message<>).MakeGenericType(t));
3029
return (IMessage)Activator.CreateInstance(genericType, body, properties);
3130
}
3231
}
33-
}
32+
}

0 commit comments

Comments
 (0)