diff --git a/common/src/main/java/org/apache/rocketmq/common/attribute/TopicMessageType.java b/common/src/main/java/org/apache/rocketmq/common/attribute/TopicMessageType.java index 9d3cb7608e5..267a0a758d2 100644 --- a/common/src/main/java/org/apache/rocketmq/common/attribute/TopicMessageType.java +++ b/common/src/main/java/org/apache/rocketmq/common/attribute/TopicMessageType.java @@ -48,6 +48,9 @@ public String getValue() { } public static TopicMessageType parseFromMessageProperty(Map messageProperty) { + if (messageProperty == null) { + return TopicMessageType.NORMAL; + } // the parse order keeps message types mutually exclusive if (Boolean.parseBoolean(messageProperty.get(MessageConst.PROPERTY_TRANSACTION_PREPARED))) { return TopicMessageType.TRANSACTION; diff --git a/common/src/test/java/org/apache/rocketmq/common/attribute/TopicMessageTypeTest.java b/common/src/test/java/org/apache/rocketmq/common/attribute/TopicMessageTypeTest.java index 1029e397781..b0158ed4cf6 100644 --- a/common/src/test/java/org/apache/rocketmq/common/attribute/TopicMessageTypeTest.java +++ b/common/src/test/java/org/apache/rocketmq/common/attribute/TopicMessageTypeTest.java @@ -137,4 +137,10 @@ public void testParseFromMessageProperty() { properties.clear(); Assert.assertEquals(TopicMessageType.NORMAL, TopicMessageType.parseFromMessageProperty(properties)); } + + @Test + public void testParseFromMessageProperty_Null() { + // null map should be treated as empty - return NORMAL default + assertEquals(TopicMessageType.NORMAL, TopicMessageType.parseFromMessageProperty(null)); + } }