diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java index 5051c5e7f..320c7115c 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java @@ -1023,6 +1023,20 @@ MessageAnnotations getMessageAnnotations() { return result; } + public Set getMessageAnnotationNames() { + if(messageAnnotationsMap != null && !messageAnnotationsMap.isEmpty()) { + return messageAnnotationsMap.keySet(); + } + return null; + } + + public Set getDeliveryAnnotationNames() { + if(deliveryAnnotationsMap != null && !deliveryAnnotationsMap.isEmpty()) { + return deliveryAnnotationsMap.keySet(); + } + return null; + } + void setMessageAnnotations(MessageAnnotations messageAnnotations) { if (messageAnnotations != null) { this.messageAnnotationsMap = messageAnnotations.getValue(); diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacadeTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacadeTest.java index c92e9bef0..03074ccb9 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacadeTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacadeTest.java @@ -1763,6 +1763,50 @@ public void testGetMessageAnnotationsOnMessageWithEmptyAnnotationsMap() { assertNull(underlyingAnnotations); } + @Test + public void testGetMessageAnnotationNamesOnMessageWithAnnotationsMap() { + AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade(); + final Symbol symbol = Symbol.valueOf("x-opt-testKey1"); + amqpMessageFacade.setMessageAnnotation(symbol, "testValue1"); + + Set msgAnnotationNames = amqpMessageFacade.getMessageAnnotationNames(); + assertNotNull(msgAnnotationNames); + assertEquals(symbol.toString(), msgAnnotationNames.iterator().next().toString()); + } + + @Test + public void testGetMessageAnnotationNamesOnMessageWithEmptyAnnotationsMap() { + AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade(); + + Set msgAnnotationNames = amqpMessageFacade.getMessageAnnotationNames(); + assertNull(msgAnnotationNames); + } + + @Test + public void testGetDeliveryAnnotationNamesOnMessageWithEmptyAnnotationsMap() { + AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade(); + Map deliveryAnnotationsMap = new HashMap<>(); + DeliveryAnnotations deliveryAnnotations = new DeliveryAnnotations(deliveryAnnotationsMap); + amqpMessageFacade.setDeliveryAnnotations(deliveryAnnotations); + + Set deliveryAnnotationNames = amqpMessageFacade.getDeliveryAnnotationNames(); + assertNull(deliveryAnnotationNames); + } + + @Test + public void testGetDeliveryAnnotationNamesOnMessageWithAnnotationsMap() { + AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade(); + final Symbol symbol = Symbol.valueOf("testKey1"); + Map deliveryAnnotationsMap = new HashMap<>(); + deliveryAnnotationsMap.put(symbol, "testValue1"); + DeliveryAnnotations deliveryAnnotations = new DeliveryAnnotations(deliveryAnnotationsMap); + amqpMessageFacade.setDeliveryAnnotations(deliveryAnnotations); + + Set deliveryAnnotationNames = amqpMessageFacade.getDeliveryAnnotationNames(); + assertNotNull(deliveryAnnotationNames); + assertEquals(symbol.toString(), deliveryAnnotationNames.iterator().next().toString()); + } + @Test public void testRemoveMessageAnnotation() { Symbol symbolKeyName = Symbol.valueOf("myTestSymbolName");