Author: rajith
Date: Thu May  9 14:19:18 2013
New Revision: 1480656

URL: http://svn.apache.org/r1480656
Log:
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.

Modified:
    
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java
    
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10Test.java

Modified: 
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java?rev=1480656&r1=1480655&r2=1480656&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java
 (original)
+++ 
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java
 Thu May  9 14:19:18 2013
@@ -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 ext
     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 ext
 
     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 ext
 
         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 ext
         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 ext
         {
             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 ext
 //          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))))

Modified: 
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10Test.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10Test.java?rev=1480656&r1=1480655&r2=1480656&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10Test.java
 (original)
+++ 
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10Test.java
 Thu May  9 14:19:18 2013
@@ -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
         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");
+        }
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to