You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2014/09/26 18:15:46 UTC

[1/4] git commit: add a note for later

Repository: qpid-jms
Updated Branches:
  refs/heads/master d94144cc9 -> bc8124b84


add a note for later


Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/bc8124b8
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/bc8124b8
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/bc8124b8

Branch: refs/heads/master
Commit: bc8124b8438b5e47be8f252a26a6f23c8afa560b
Parents: 72c2d66
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Sep 26 17:06:10 2014 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Sep 26 17:15:15 2014 +0100

----------------------------------------------------------------------
 .../org/apache/qpid/jms/integration/MessageIntegrationTest.java    | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/bc8124b8/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
index 999df5a..6cd11fb 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
@@ -851,6 +851,8 @@ public class MessageIntegrationTest extends QpidJmsTestCase
     private Object classifyUnderlyingIdType(Object idForAmqpMessageClass) {
         Object underlyingAmqpMessageId = idForAmqpMessageClass;
 
+        // TODO: get rid of this method, use the proton types directly in the tests
+
         if (underlyingAmqpMessageId instanceof BigInteger) {
             // Proton uses UnsignedLong
             underlyingAmqpMessageId = UnsignedLong.valueOf((BigInteger) underlyingAmqpMessageId);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org


[2/4] git commit: fix population of creation-time field of propertie section, via sender using setJMSTimestamp

Posted by ro...@apache.org.
fix population of creation-time field of propertie section, via sender using setJMSTimestamp


Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/ee8a4cbd
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/ee8a4cbd
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/ee8a4cbd

Branch: refs/heads/master
Commit: ee8a4cbdca8a66f0ce58b83f9d52458217efedd0
Parents: 9919d2f
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Sep 26 16:55:09 2014 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Sep 26 17:15:15 2014 +0100

----------------------------------------------------------------------
 .../amqp/message/AmqpJmsMessageFacade.java      |  8 ++++----
 .../amqp/message/AmqpJmsMessageFacadeTest.java  | 20 ++++++++++++++++++++
 2 files changed, 24 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/ee8a4cbd/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
----------------------------------------------------------------------
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 5eb5ede..6855b60 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
@@ -348,10 +348,10 @@ public class AmqpJmsMessageFacade implements JmsMessageFacade {
 
     @Override
     public void setTimestamp(long timestamp) {
-        if (message.getProperties() != null) {
-            if (timestamp != 0) {
-                message.setCreationTime(timestamp);
-            } else {
+        if (timestamp != 0) {
+            message.setCreationTime(timestamp);
+        } else {
+            if (message.getProperties() != null) {
                 message.getProperties().setCreationTime(null);
             }
         }

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/ee8a4cbd/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacadeTest.java
----------------------------------------------------------------------
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 c536d90..d5a73e3 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
@@ -28,6 +28,7 @@ import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
 import java.nio.ByteBuffer;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
@@ -75,8 +76,11 @@ public class AmqpJmsMessageFacadeTest {
         return Mockito.mock(AmqpConnection.class);
     }
 
+
     // ====== AMQP Properties Section =======
 
+    // --- message-id and correlation-id ---
+
     @Test
     public void testGetCorrelationIdIsNullOnNewMessage() {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
@@ -405,6 +409,22 @@ public class AmqpJmsMessageFacadeTest {
         return new Binary(idBytes);
     }
 
+    // --- creation-time field  ---
+
+    @Test
+    public void testSetCreationTimeOnNewNewMessage() {
+        AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
+
+        assertNull("Expected null Properties section", amqpMessageFacade.getAmqpMessage().getProperties());
+
+        long expected = 1;
+        amqpMessageFacade.setTimestamp(expected);
+
+        assertEquals("Unexpected timestamp value", expected, amqpMessageFacade.getTimestamp());
+        assertEquals("Expected creation-time field to be set on new Properties section", new Date(expected), amqpMessageFacade.getAmqpMessage().getProperties().getCreationTime());
+    }
+
+
     // ====== AMQP Message Facade copy() tests =======
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org


[4/4] git commit: add some support for messages arriving without the annotation to signal JMS message type

Posted by ro...@apache.org.
add some support for messages arriving without the annotation to signal JMS message type


Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/9919d2f8
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/9919d2f8
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/9919d2f8

Branch: refs/heads/master
Commit: 9919d2f848d76ac27bd60734cfaa1d04d814779d
Parents: d94144c
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Sep 26 16:11:11 2014 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Sep 26 17:15:15 2014 +0100

----------------------------------------------------------------------
 .../amqp/message/AmqpJmsMessageBuilder.java     | 92 ++++++++++++++++++--
 .../amqp/message/AmqpMessageSupport.java        | 35 ++++++++
 2 files changed, 121 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/9919d2f8/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java
index a09cee2..9eeef20 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java
@@ -23,6 +23,10 @@ import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_M
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_OBJECT_MESSAGE;
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_STREAM_MESSAGE;
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_TEXT_MESSAGE;
+import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.OCTET_STREAM_CONTENT_TYPE;
+import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.SERIALIZED_JAVA_OBJECT_CONTENT_TYPE;
+import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.TEXT_PLAIN_CONTENT_TYPE;
+import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.isContentType;
 
 import java.io.IOException;
 
@@ -33,6 +37,10 @@ import org.apache.qpid.jms.message.JmsObjectMessage;
 import org.apache.qpid.jms.message.JmsStreamMessage;
 import org.apache.qpid.jms.message.JmsTextMessage;
 import org.apache.qpid.jms.provider.amqp.AmqpConsumer;
+import org.apache.qpid.proton.amqp.Binary;
+import org.apache.qpid.proton.amqp.messaging.AmqpValue;
+import org.apache.qpid.proton.amqp.messaging.Data;
+import org.apache.qpid.proton.amqp.messaging.Section;
 import org.apache.qpid.proton.message.Message;
 
 /**
@@ -65,6 +73,12 @@ public class AmqpJmsMessageBuilder {
             return result;
         }
 
+        // Next, match specific section structures and content types
+        result = createWithoutAnnotation(consumer, message);
+        if (result != null) {
+            return result;
+        }
+
         // TODO
         throw new IOException("Could not create a JMS message from incoming message");
     }
@@ -75,17 +89,17 @@ public class AmqpJmsMessageBuilder {
 
             switch ((byte) annotation) {
                 case JMS_MESSAGE:
-                    return new JmsMessage(new AmqpJmsMessageFacade(consumer, message));
+                    return createMessage(consumer, message);
                 case JMS_BYTES_MESSAGE:
-                    return new JmsBytesMessage(new AmqpJmsBytesMessageFacade(consumer, message));
+                    return createBytesMessage(consumer, message);
                 case JMS_TEXT_MESSAGE:
-                    return new JmsTextMessage(new AmqpJmsTextMessageFacade(consumer, message));
+                    return createTextMessage(consumer, message);
                 case JMS_MAP_MESSAGE:
-                    return new JmsMapMessage(new AmqpJmsMapMessageFacade(consumer, message));
+                    return createMapMessage(consumer, message);
                 case JMS_STREAM_MESSAGE:
-                    return new JmsStreamMessage(new AmqpJmsStreamMessageFacade(consumer, message));
+                    return createStreamMessage(consumer, message);
                 case JMS_OBJECT_MESSAGE:
-                    return new JmsObjectMessage(new AmqpJmsObjectMessageFacade(consumer, message));
+                    return createObjectMessage(consumer, message);
                 default:
                     throw new IOException("Invalid JMS Message Type annotation found in message");
             }
@@ -93,4 +107,70 @@ public class AmqpJmsMessageBuilder {
 
         return null;
     }
+
+    private static JmsMessage createWithoutAnnotation(AmqpConsumer consumer, Message message) {
+        Section body = message.getBody();
+
+        if (body == null) {
+            // TODO: accept textual content types other than strictly "text/plain"
+            if (isContentType(TEXT_PLAIN_CONTENT_TYPE, message)) {
+                return createTextMessage(consumer, message);
+            } else if (isContentType(SERIALIZED_JAVA_OBJECT_CONTENT_TYPE, message)) {
+                return createObjectMessage(consumer, message);
+            } else if (isContentType(OCTET_STREAM_CONTENT_TYPE, message) || isContentType(null, message)) {
+                return createBytesMessage(consumer, message);
+            }
+        } else if (body instanceof Data) {
+            // TODO: accept textual content types other than strictly "text/plain"
+            if (isContentType(TEXT_PLAIN_CONTENT_TYPE, message)) {
+                return createTextMessage(consumer, message);
+            } else if (isContentType(OCTET_STREAM_CONTENT_TYPE, message) || isContentType(null, message)) {
+                return createBytesMessage(consumer, message);
+            } else if (isContentType(SERIALIZED_JAVA_OBJECT_CONTENT_TYPE, message)) {
+                return createObjectMessage(consumer, message);
+            }
+
+            // TODO: should this situation throw an exception, or just become a bytes message?
+            // Content type is set, but not to something we understand above.
+            // Falling through to return null.
+        } else if (body instanceof AmqpValue) {
+            Object value = ((AmqpValue) body).getValue();
+
+            if (value == null || value instanceof String) {
+                return createTextMessage(consumer, message);
+            } else if (value instanceof Binary) {
+                return createBytesMessage(consumer, message);
+            } else {
+                return createObjectMessage(consumer, message);
+            }
+        } else {
+            // TODO: AmqpSequence support
+        }
+
+        return null;
+    }
+
+    private static JmsObjectMessage createObjectMessage(AmqpConsumer consumer, Message message) {
+        return new JmsObjectMessage(new AmqpJmsObjectMessageFacade(consumer, message));
+    }
+
+    private static JmsStreamMessage createStreamMessage(AmqpConsumer consumer, Message message) {
+        return new JmsStreamMessage(new AmqpJmsStreamMessageFacade(consumer, message));
+    }
+
+    private static JmsMapMessage createMapMessage(AmqpConsumer consumer, Message message) {
+        return new JmsMapMessage(new AmqpJmsMapMessageFacade(consumer, message));
+    }
+
+    private static JmsTextMessage createTextMessage(AmqpConsumer consumer, Message message) {
+        return new JmsTextMessage(new AmqpJmsTextMessageFacade(consumer, message));
+    }
+
+    private static JmsBytesMessage createBytesMessage(AmqpConsumer consumer, Message message) {
+        return new JmsBytesMessage(new AmqpJmsBytesMessageFacade(consumer, message));
+    }
+
+    private static JmsMessage createMessage(AmqpConsumer consumer, Message message) {
+        return new JmsMessage(new AmqpJmsMessageFacade(consumer, message));
+    }
 }

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/9919d2f8/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageSupport.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageSupport.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageSupport.java
index 563352b..744eeef 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageSupport.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageSupport.java
@@ -131,6 +131,21 @@ public final class AmqpMessageSupport {
     public static final String JMS_AMQP_TYPED_ENCODING = "JMS_AMQP_TYPED_ENCODING";
 
     /**
+     * Content type used to mark Data sections as containing text.
+     */
+    public static final String TEXT_PLAIN_CONTENT_TYPE = "text/plain";
+
+    /**
+     * Content type used to mark Data sections as containing a serialized java object.
+     */
+    public static final String SERIALIZED_JAVA_OBJECT_CONTENT_TYPE = "application/x-java-serialized-object";
+
+    /**
+     * Content type used to mark Data sections as containing arbitrary bytes.
+     */
+    public static final String OCTET_STREAM_CONTENT_TYPE = "application/octet-stream";
+
+    /**
      * Lookup and return the correct Proton Symbol instance based on the given key.
      *
      * @param key
@@ -190,4 +205,24 @@ public final class AmqpMessageSupport {
 
         return null;
     }
+
+    /**
+     * Check whether the content-type field of the properties section (if present) in
+     * the given message matches the provided string (where null matches if there is
+     * no content type rpeesnt.
+     *
+     * @param contentType
+     *        content type string to compare against, or null if none
+     * @param message
+     *        the AMQP message object that is being examined.
+     *
+     * @return true if content type matches
+     */
+    public static boolean isContentType(String contentType, Message message) {
+        if (contentType == null) {
+            return message.getContentType() == null;
+        } else {
+            return contentType.equals(message.getContentType());
+        }
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org


[3/4] git commit: update facade and property interceptor to fix propertyExists(), handle properties that do exist with a null value

Posted by ro...@apache.org.
update facade and property interceptor to fix propertyExists(), handle properties that do exist with a null value


Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/72c2d666
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/72c2d666
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/72c2d666

Branch: refs/heads/master
Commit: 72c2d666a625550ce3bf7315932bcb7f8f97cb66
Parents: ee8a4cb
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Sep 26 17:05:40 2014 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Sep 26 17:15:15 2014 +0100

----------------------------------------------------------------------
 .../qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java | 2 +-
 .../amqp/message/AmqpJmsMessagePropertyIntercepter.java      | 8 +++++---
 2 files changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/72c2d666/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
----------------------------------------------------------------------
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 6855b60..6a637c6 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
@@ -158,7 +158,7 @@ public class AmqpJmsMessageFacade implements JmsMessageFacade {
 
     @Override
     public boolean propertyExists(String key) throws JMSException {
-        return AmqpJmsMessagePropertyIntercepter.getProperty(this, key) != null;
+        return AmqpJmsMessagePropertyIntercepter.propertyExists(this, key);
     }
 
     public boolean applicationPropertyExists(String key) throws JMSException {

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/72c2d666/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepter.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepter.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepter.java
index e5c60e5..c9607aa 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepter.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepter.java
@@ -222,14 +222,16 @@ public class AmqpJmsMessagePropertyIntercepter {
      * @param name
      *        the property name that is being checked.
      *
+     * @return true if the message contains the given property.
+     *
      * @throws JMSException if an error occurs while inspecting the defined property.
      */
-    public static void propertyExists(AmqpJmsMessageFacade message, String name) throws JMSException {
+    public static boolean propertyExists(AmqpJmsMessageFacade message, String name) throws JMSException {
         PropertyIntercepter propertyExpression = PROPERTY_INTERCEPTERS.get(name);
         if (propertyExpression != null) {
-            propertyExpression.propertyExists(message);
+            return propertyExpression.propertyExists(message);
         } else {
-            message.applicationPropertyExists(name);
+            return message.applicationPropertyExists(name);
         }
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org