diff options
| author | Rajith Muditha Attapattu <rajith@apache.org> | 2013-05-09 14:19:18 +0000 |
|---|---|---|
| committer | Rajith Muditha Attapattu <rajith@apache.org> | 2013-05-09 14:19:18 +0000 |
| commit | cb01c674ec6ca29b99243fca0c8383dfd41e9ee6 (patch) | |
| tree | 5984bc61ef058aa6c4a37257201736c2ba1e7670 /java | |
| parent | 74b560985b35ceb6e5f82e80e388d425ff4cfb8e (diff) | |
| download | qpid-python-cb01c674ec6ca29b99243fca0c8383dfd41e9ee6.tar.gz | |
QPID-3838 If stric-jms flag is used qpid.subject is prefixed with "JMS_"
to ensure we are in compliance with the JMS spec. Without this fix we
fail the JEE TCK.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1480656 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
| -rw-r--r-- | java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java | 23 | ||||
| -rw-r--r-- | java/client/src/test/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10Test.java | 39 |
2 files changed, 56 insertions, 6 deletions
diff --git a/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java b/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java index 41dcba0f10..ef92a9281e 100644 --- a/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java +++ b/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java @@ -27,6 +27,7 @@ import org.slf4j.LoggerFactory; import org.apache.qpid.AMQException; import org.apache.qpid.AMQPInvalidClassException; import org.apache.qpid.client.AMQDestination; +import org.apache.qpid.client.AMQDestination.DestSyntax; import org.apache.qpid.client.AMQSession_0_10; import org.apache.qpid.client.CustomJMSXProperty; import org.apache.qpid.framing.AMQShortString; @@ -92,6 +93,7 @@ public class AMQMessageDelegate_0_10 extends AbstractAMQMessageDelegate private MessageProperties _messageProps; private DeliveryProperties _deliveryProps; private String _messageID; + private boolean isStrictJMS = Boolean.getBoolean("strict-jms"); protected AMQMessageDelegate_0_10() { @@ -101,6 +103,11 @@ public class AMQMessageDelegate_0_10 extends AbstractAMQMessageDelegate protected AMQMessageDelegate_0_10(MessageProperties messageProps, DeliveryProperties deliveryProps, long deliveryTag) { + this(AMQDestination.getDefaultDestSyntax(),messageProps,deliveryProps,deliveryTag); + } + + protected AMQMessageDelegate_0_10(DestSyntax destSyntax,MessageProperties messageProps, DeliveryProperties deliveryProps, long deliveryTag) + { super(deliveryTag); _messageProps = messageProps; _deliveryProps = deliveryProps; @@ -108,7 +115,7 @@ public class AMQMessageDelegate_0_10 extends AbstractAMQMessageDelegate AMQDestination dest; - if (AMQDestination.getDefaultDestSyntax() == AMQDestination.DestSyntax.BURL) + if (destSyntax == AMQDestination.DestSyntax.BURL) { dest = generateDestination(new AMQShortString(_deliveryProps.getExchange()), new AMQShortString(_deliveryProps.getRoutingKey())); @@ -116,9 +123,15 @@ public class AMQMessageDelegate_0_10 extends AbstractAMQMessageDelegate else { String subject = null; - if (messageProps != null && messageProps.getApplicationHeaders() != null) + if (isStrictJMS && messageProps != null && messageProps.getApplicationHeaders() != null) { + System.out.println("%%%% Going to set subject"); subject = (String)messageProps.getApplicationHeaders().get(QpidMessageProperties.QPID_SUBJECT); + if (subject != null) + { + messageProps.getApplicationHeaders().remove(QpidMessageProperties.QPID_SUBJECT); + messageProps.getApplicationHeaders().put("JMS_" + QpidMessageProperties.QPID_SUBJECT,subject); + } } dest = (AMQDestination) convertToAddressBasedDestination(_deliveryProps.getExchange(), _deliveryProps.getRoutingKey(), subject); @@ -732,6 +745,10 @@ public class AMQMessageDelegate_0_10 extends AbstractAMQMessageDelegate { return _deliveryProps.getRoutingKey(); } + else if (isStrictJMS && QpidMessageProperties.QPID_SUBJECT.equals(propertyName)) + { + return (String)getApplicationHeaders().get("JMS_" + QpidMessageProperties.QPID_SUBJECT); + } else { checkPropertyName(propertyName); @@ -976,7 +993,7 @@ public class AMQMessageDelegate_0_10 extends AbstractAMQMessageDelegate // JMSType. JMSMessageID, JMSCorrelationID, and JMSType values may be // null and if so are treated as a NULL value. - if (Boolean.getBoolean("strict-jms")) + if (isStrictJMS) { // JMS start character if (!(Character.isJavaIdentifierStart(propertyName.charAt(0)))) diff --git a/java/client/src/test/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10Test.java b/java/client/src/test/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10Test.java index 8c66a75764..5fff6b6b35 100644 --- a/java/client/src/test/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10Test.java +++ b/java/client/src/test/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10Test.java @@ -20,16 +20,18 @@ */ package org.apache.qpid.client.message; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + import javax.jms.Destination; +import org.apache.qpid.client.AMQDestination; import org.apache.qpid.test.utils.QpidTestCase; import org.apache.qpid.transport.DeliveryProperties; import org.apache.qpid.transport.MessageProperties; import org.apache.qpid.transport.ReplyTo; -import java.util.HashMap; -import java.util.Map; - public class AMQMessageDelegate_0_10Test extends QpidTestCase { @@ -105,4 +107,35 @@ public class AMQMessageDelegate_0_10Test extends QpidTestCase assertEquals("Min short value not retrieved successfully", Short.MIN_VALUE, delegate.getShortProperty(MIN_SHORT)); } + // See QPID_3838 + public void testJMSComplainceForQpidProviderProperties() throws Exception + { + MessageProperties msgProps = new MessageProperties(); + Map<String, Object> appHeaders = new HashMap<String, Object>(); + appHeaders.put(QpidMessageProperties.QPID_SUBJECT, "Hello"); + msgProps.setApplicationHeaders(appHeaders); + + System.setProperty("strict-jms", "true"); + try + { + AMQMessageDelegate_0_10 delegate = new AMQMessageDelegate_0_10(AMQDestination.DestSyntax.ADDR,msgProps,new DeliveryProperties(),1L); + + boolean propFound = false; + for (Enumeration props = delegate.getPropertyNames(); props.hasMoreElements();) + { + String key = (String)props.nextElement(); + System.out.println("PropName : " + key); + if (key.equals("JMS_" + QpidMessageProperties.QPID_SUBJECT)) + { + propFound = true; + } + } + assertTrue("qpid.subject was not prefixed with 'JMS_' as expected",propFound); + assertEquals("qpid.subject should still return the correct value","Hello",delegate.getStringProperty(QpidMessageProperties.QPID_SUBJECT)); + } + finally + { + System.setProperty("strict-jms", "false"); + } + } } |
