PROTON-711: add support (disabled by default) for using a byte value for destination type annotations during outbound transformation
git-svn-id: https://svn.apache.org/repos/asf/qpid/proton/trunk@1631794 13f79535-47bb-0310-9956-ffa450edef68 Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/72b7beba Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/72b7beba Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/72b7beba Branch: refs/heads/examples Commit: 72b7beba08f6eda64f9ce7d46d04f8d4e05f99c5 Parents: c87fc8a Author: Robert Gemmell <rob...@apache.org> Authored: Tue Oct 14 15:33:34 2014 +0000 Committer: Robert Gemmell <rob...@apache.org> Committed: Tue Oct 14 15:33:34 2014 +0000 ---------------------------------------------------------------------- .../proton/jms/AutoOutboundTransformer.java | 6 + .../jms/JMSMappingOutboundTransformer.java | 44 ++++-- .../org/apache/qpid/proton/jms/JMSVendor.java | 16 +- .../qpid/proton/jms/OutboundTransformer.java | 14 +- .../jms/JMSMappingOutboundTransformerTest.java | 149 +++++++++++++++++-- 5 files changed, 197 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/72b7beba/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java ---------------------------------------------------------------------- diff --git a/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java b/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java index f62760b..0440709 100644 --- a/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java +++ b/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java @@ -46,4 +46,10 @@ public class AutoOutboundTransformer extends JMSMappingOutboundTransformer { } } + @Override + public void setUseByteDestinationTypeAnnotations(boolean useByteDestinationTypeAnnotations) + { + super.setUseByteDestinationTypeAnnotations(useByteDestinationTypeAnnotations); + transformer.setUseByteDestinationTypeAnnotations(useByteDestinationTypeAnnotations); + } } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/72b7beba/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java ---------------------------------------------------------------------- diff --git a/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java b/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java index ba91f0a..38c9aac 100644 --- a/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java +++ b/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java @@ -224,21 +224,39 @@ public class JMSMappingOutboundTransformer extends OutboundTransformer { return (ProtonJMessage) org.apache.qpid.proton.message.Message.Factory.create(header, da, ma, props, ap, body, footer); } - private static String destinationAttributes(Destination destination) { - if( destination instanceof Queue ) { - if( destination instanceof TemporaryQueue ) { - return "temporary,queue"; - } else { - return "queue"; + private Object destinationAttributes(Destination destination) { + if(isUseByteDestinationTypeAnnotations()) { + if( destination instanceof Queue ) { + if( destination instanceof TemporaryQueue ) { + return JMSVendor.TEMP_QUEUE_TYPE; + } else { + return JMSVendor.QUEUE_TYPE; + } } - } - if( destination instanceof Topic ) { - if( destination instanceof TemporaryTopic ) { - return "temporary,topic"; - } else { - return "topic"; + if( destination instanceof Topic ) { + if( destination instanceof TemporaryTopic ) { + return JMSVendor.TEMP_TOPIC_TYPE; + } else { + return JMSVendor.TOPIC_TYPE; + } + } + return JMSVendor.QUEUE_TYPE; + } else { + if( destination instanceof Queue ) { + if( destination instanceof TemporaryQueue ) { + return "temporary,queue"; + } else { + return "queue"; + } + } + if( destination instanceof Topic ) { + if( destination instanceof TemporaryTopic ) { + return "temporary,topic"; + } else { + return "topic"; + } } + return ""; } - return ""; } } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/72b7beba/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSVendor.java ---------------------------------------------------------------------- diff --git a/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSVendor.java b/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSVendor.java index 5d02069..b1a9b25 100644 --- a/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSVendor.java +++ b/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSVendor.java @@ -1,15 +1,23 @@ package org.apache.qpid.proton.jms; -import javax.jms.*; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; +import javax.jms.BytesMessage; +import javax.jms.Destination; +import javax.jms.MapMessage; +import javax.jms.Message; +import javax.jms.ObjectMessage; +import javax.jms.StreamMessage; +import javax.jms.TextMessage; /** * @author <a href="http://hiramchirino.com">Hiram Chirino</a> */ abstract public class JMSVendor { + public static final byte QUEUE_TYPE = 0x00; + public static final byte TOPIC_TYPE = 0x01; + public static final byte TEMP_QUEUE_TYPE = 0x02; + public static final byte TEMP_TOPIC_TYPE = 0x03; + public abstract BytesMessage createBytesMessage(); public abstract StreamMessage createStreamMessage(); http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/72b7beba/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java ---------------------------------------------------------------------- diff --git a/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java b/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java index 09a6e15..596a4ed 100644 --- a/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java +++ b/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java @@ -16,8 +16,6 @@ */ package org.apache.qpid.proton.jms; -import org.apache.qpid.proton.engine.Delivery; - import javax.jms.Message; /** @@ -43,7 +41,7 @@ public abstract class OutboundTransformer { String replyToGroupIDKey; String prefixFooterKey; - + private boolean useByteDestinationTypeAnnotations; public OutboundTransformer(JMSVendor vendor) { this.vendor = vendor; @@ -52,6 +50,16 @@ public abstract class OutboundTransformer { public abstract EncodedMessage transform(Message jms) throws Exception; + public boolean isUseByteDestinationTypeAnnotations() + { + return useByteDestinationTypeAnnotations; + } + + public void setUseByteDestinationTypeAnnotations(boolean useByteDestinationTypeAnnotations) + { + this.useByteDestinationTypeAnnotations = useByteDestinationTypeAnnotations; + } + public String getPrefixVendor() { return prefixVendor; } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/72b7beba/contrib/proton-jms/src/test/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformerTest.java ---------------------------------------------------------------------- diff --git a/contrib/proton-jms/src/test/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformerTest.java b/contrib/proton-jms/src/test/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformerTest.java index 1b14627..2bb5209 100644 --- a/contrib/proton-jms/src/test/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformerTest.java +++ b/contrib/proton-jms/src/test/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformerTest.java @@ -54,13 +54,34 @@ public class JMSMappingOutboundTransformerTest assertEquals(contentString, ((AmqpValue) amqp.getBody()).getValue()); } + @Test + public void testDefaultsTolStringDestinationTypeAnnotationValues() + { + JMSVendor mockVendor = createMockVendor(); + JMSMappingOutboundTransformer transformer = new JMSMappingOutboundTransformer(mockVendor); + + assertFalse("Expected the older string style annotation values to be used by default", transformer.isUseByteDestinationTypeAnnotations()); + } + + @Test + public void testSetGetIsUseByteDestinationTypeAnnotations() + { + JMSVendor mockVendor = createMockVendor(); + JMSMappingOutboundTransformer transformer = new JMSMappingOutboundTransformer(mockVendor); + + assertFalse(transformer.isUseByteDestinationTypeAnnotations()); + transformer.setUseByteDestinationTypeAnnotations(true); + assertTrue(transformer.isUseByteDestinationTypeAnnotations()); + } + // ======= JMSDestination Handling ========= // ========================================= + // --- String type annotation --- @Test public void testConvertMessageWithJMSDestinationNull() throws Exception { - doTestConvertMessageWithJMSDestination(null, null); + doTestConvertMessageWithJMSDestination(null, null, false); } @Test @@ -68,7 +89,7 @@ public class JMSMappingOutboundTransformerTest { Queue mockDest = Mockito.mock(Queue.class); - doTestConvertMessageWithJMSDestination(mockDest, "queue"); + doTestConvertMessageWithJMSDestination(mockDest, "queue", false); } @Test @@ -76,7 +97,7 @@ public class JMSMappingOutboundTransformerTest { TemporaryQueue mockDest = Mockito.mock(TemporaryQueue.class); - doTestConvertMessageWithJMSDestination(mockDest, "temporary,queue"); + doTestConvertMessageWithJMSDestination(mockDest, "temporary,queue", false); } @Test @@ -84,7 +105,7 @@ public class JMSMappingOutboundTransformerTest { Topic mockDest = Mockito.mock(Topic.class); - doTestConvertMessageWithJMSDestination(mockDest, "topic"); + doTestConvertMessageWithJMSDestination(mockDest, "topic", false); } @Test @@ -92,10 +113,58 @@ public class JMSMappingOutboundTransformerTest { TemporaryTopic mockDest = Mockito.mock(TemporaryTopic.class); - doTestConvertMessageWithJMSDestination(mockDest, "temporary,topic"); + doTestConvertMessageWithJMSDestination(mockDest, "temporary,topic", false); } - private void doTestConvertMessageWithJMSDestination(Destination jmsDestination, Object expectedAnnotationValue) throws Exception + // --- byte type annotation --- + + @Test + public void testConvertMessageWithJMSDestinationNullUsingByteAnnotation() throws Exception + { + doTestConvertMessageWithJMSDestination(null, null, true); + } + + @Test + public void testConvertMessageWithJMSDestinationQueueUsingByteAnnotation() throws Exception + { + Queue mockDest = Mockito.mock(Queue.class); + + doTestConvertMessageWithJMSDestination(mockDest, JMSVendor.QUEUE_TYPE, true); + } + + @Test + public void testConvertMessageWithJMSDestinationTemporaryQueueUsingByteAnnotation() throws Exception + { + TemporaryQueue mockDest = Mockito.mock(TemporaryQueue.class); + + doTestConvertMessageWithJMSDestination(mockDest, JMSVendor.TEMP_QUEUE_TYPE, true); + } + + @Test + public void testConvertMessageWithJMSDestinationTopicUsingByteAnnotation() throws Exception + { + Topic mockDest = Mockito.mock(Topic.class); + + doTestConvertMessageWithJMSDestination(mockDest, JMSVendor.TOPIC_TYPE, true); + } + + @Test + public void testConvertMessageWithJMSDestinationTemporaryTopicUsingByteAnnotation() throws Exception + { + TemporaryTopic mockDest = Mockito.mock(TemporaryTopic.class); + + doTestConvertMessageWithJMSDestination(mockDest, JMSVendor.TEMP_TOPIC_TYPE, true); + } + + @Test + public void testConvertMessageWithJMSDestinationUnkownUsingByteAnnotation() throws Exception + { + Destination mockDest = Mockito.mock(Destination.class); + + doTestConvertMessageWithJMSDestination(mockDest, JMSVendor.QUEUE_TYPE, true); + } + + private void doTestConvertMessageWithJMSDestination(Destination jmsDestination, Object expectedAnnotationValue, boolean byteType) throws Exception { TextMessage mockTextMessage = createMockTextMessage(); Mockito.when(mockTextMessage.getText()).thenReturn("myTextMessageContent"); @@ -109,6 +178,10 @@ public class JMSMappingOutboundTransformerTest } JMSMappingOutboundTransformer transformer = new JMSMappingOutboundTransformer(mockVendor); + if(byteType) + { + transformer.setUseByteDestinationTypeAnnotations(true); + } Message amqp = transformer.convert(mockTextMessage); @@ -133,10 +206,11 @@ public class JMSMappingOutboundTransformerTest // ======= JMSReplyTo Handling ========= // ===================================== + // --- String type annotation --- @Test public void testConvertMessageWithJMSReplyToNull() throws Exception { - doTestConvertMessageWithJMSReplyTo(null, null); + doTestConvertMessageWithJMSReplyTo(null, null, false); } @Test @@ -144,7 +218,7 @@ public class JMSMappingOutboundTransformerTest { Queue mockDest = Mockito.mock(Queue.class); - doTestConvertMessageWithJMSReplyTo(mockDest, "queue"); + doTestConvertMessageWithJMSReplyTo(mockDest, "queue", false); } @Test @@ -152,7 +226,7 @@ public class JMSMappingOutboundTransformerTest { TemporaryQueue mockDest = Mockito.mock(TemporaryQueue.class); - doTestConvertMessageWithJMSReplyTo(mockDest, "temporary,queue"); + doTestConvertMessageWithJMSReplyTo(mockDest, "temporary,queue", false); } @Test @@ -160,7 +234,7 @@ public class JMSMappingOutboundTransformerTest { Topic mockDest = Mockito.mock(Topic.class); - doTestConvertMessageWithJMSReplyTo(mockDest, "topic"); + doTestConvertMessageWithJMSReplyTo(mockDest, "topic", false); } @Test @@ -168,10 +242,57 @@ public class JMSMappingOutboundTransformerTest { TemporaryTopic mockDest = Mockito.mock(TemporaryTopic.class); - doTestConvertMessageWithJMSReplyTo(mockDest, "temporary,topic"); + doTestConvertMessageWithJMSReplyTo(mockDest, "temporary,topic", false); + } + + // --- byte type annotation --- + @Test + public void testConvertMessageWithJMSReplyToNullUsingByteAnnotation() throws Exception + { + doTestConvertMessageWithJMSReplyTo(null, null, true); + } + + @Test + public void testConvertMessageWithJMSReplyToQueueUsingByteAnnotation() throws Exception + { + Queue mockDest = Mockito.mock(Queue.class); + + doTestConvertMessageWithJMSReplyTo(mockDest, JMSVendor.QUEUE_TYPE, true); + } + + @Test + public void testConvertMessageWithJMSReplyToTemporaryQueueUsingByteAnnotation() throws Exception + { + TemporaryQueue mockDest = Mockito.mock(TemporaryQueue.class); + + doTestConvertMessageWithJMSReplyTo(mockDest, JMSVendor.TEMP_QUEUE_TYPE, true); + } + + @Test + public void testConvertMessageWithJMSReplyToTopicUsingByteAnnotation() throws Exception + { + Topic mockDest = Mockito.mock(Topic.class); + + doTestConvertMessageWithJMSReplyTo(mockDest, JMSVendor.TOPIC_TYPE, true); + } + + @Test + public void testConvertMessageWithJMSReplyToTemporaryTopicUsingByteAnnotation() throws Exception + { + TemporaryTopic mockDest = Mockito.mock(TemporaryTopic.class); + + doTestConvertMessageWithJMSReplyTo(mockDest, JMSVendor.TEMP_TOPIC_TYPE, true); + } + + @Test + public void testConvertMessageWithJMSReplyToUnkownUsingByteAnnotation() throws Exception + { + Destination mockDest = Mockito.mock(Destination.class); + + doTestConvertMessageWithJMSReplyTo(mockDest, JMSVendor.QUEUE_TYPE, true); } - private void doTestConvertMessageWithJMSReplyTo(Destination jmsReplyTo, Object expectedAnnotationValue) throws Exception + private void doTestConvertMessageWithJMSReplyTo(Destination jmsReplyTo, Object expectedAnnotationValue, boolean byteType) throws Exception { TextMessage mockTextMessage = createMockTextMessage(); Mockito.when(mockTextMessage.getText()).thenReturn("myTextMessageContent"); @@ -185,6 +306,10 @@ public class JMSMappingOutboundTransformerTest } JMSMappingOutboundTransformer transformer = new JMSMappingOutboundTransformer(mockVendor); + if(byteType) + { + transformer.setUseByteDestinationTypeAnnotations(true); + } Message amqp = transformer.convert(mockTextMessage); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org