From d02c8cd16f8f9b3c089efcc05d8b9a941d73bc48 Mon Sep 17 00:00:00 2001 From: Erwin Dondorp Date: Thu, 30 Dec 2021 12:09:30 +0100 Subject: [PATCH] ARTEMIS-3623 preserve type of numeric extraProperties --- .../protocol/amqp/broker/AMQPMessage.java | 7 ++++++- .../protocol/amqp/broker/AMQPMessageTest.java | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessage.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessage.java index cd39c573f0..9ec7b62ab8 100644 --- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessage.java +++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessage.java @@ -872,7 +872,12 @@ public abstract class AMQPMessage extends RefCountMessage implements org.apache. TypedProperties extraProperties = getExtraProperties(); if (extraProperties != null) { extraProperties.forEach((s, o) -> { - map.put(extraPropertiesPrefix + s.toString(), JsonUtil.truncate(o.toString(), valueSizeLimit)); + if (o instanceof Number) { + // keep fields like _AMQ_ACTUAL_EXPIRY in their original type + map.put(extraPropertiesPrefix + s.toString(), o); + } else { + map.put(extraPropertiesPrefix + s.toString(), JsonUtil.truncate(o.toString(), valueSizeLimit)); + } }); } diff --git a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessageTest.java b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessageTest.java index 8a450ec0a9..0cfdc3b6bf 100644 --- a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessageTest.java +++ b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessageTest.java @@ -2522,6 +2522,22 @@ public class AMQPMessageTest { assertEquals(org.apache.activemq.artemis.api.core.Message.TEXT_TYPE, cd.get(CompositeDataConstants.TYPE)); } + @Test + public void testToPropertyMap() throws Exception { + Message protonMessage = Message.Factory.create(); + AMQPStandardMessage decoded = encodeAndDecodeMessage(protonMessage); + TypedProperties props = decoded.createExtraProperties(); + props.putSimpleStringProperty(new SimpleString("firstString"), new SimpleString("firstValue")); + props.putLongProperty(new SimpleString("secondLong"), 1234567); + + // same as toPropertyMap(false,5) + Map map = decoded.toPropertyMap(-1); + + assertEquals(2, map.size()); + assertEquals(map.get("firstString"), "firstValue"); + assertEquals(map.get("secondLong"), 1234567L); + } + //----- Test Support ------------------------------------------------------// private MessageImpl createProtonMessage() {