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

git commit: Finish the property intercepter bits around ObjectMessage serialization vs AMQP typed values.

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


Finish the property intercepter bits around ObjectMessage serialization
vs AMQP typed values.

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

Branch: refs/heads/master
Commit: d94144cc95e8d43c38e8ded20c99dff2854579bf
Parents: dc40b09
Author: Timothy Bish <ta...@gmail.com>
Authored: Fri Sep 26 11:27:09 2014 -0400
Committer: Timothy Bish <ta...@gmail.com>
Committed: Fri Sep 26 11:27:09 2014 -0400

----------------------------------------------------------------------
 .../AmqpJmsMessagePropertyIntercepter.java      |  5 +----
 .../message/AmqpJmsObjectMessageFacade.java     | 22 +++++++++++++++++++-
 .../amqp/message/AmqpObjectTypeDelegate.java    |  6 ++++++
 .../message/AmqpSerializedObjectDelegate.java   |  4 ++++
 .../amqp/message/AmqpTypedObjectDelegate.java   |  4 ++++
 .../AmqpJmsMessagePropertyIntercepterTest.java  | 22 +++++++++++++++++++-
 6 files changed, 57 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d94144cc/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 c5eb0d9..e5c60e5 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
@@ -147,7 +147,7 @@ public class AmqpJmsMessagePropertyIntercepter {
                 }
 
                 if (message instanceof AmqpJmsObjectMessageFacade) {
-                    // ((AmqpJmsSerializedObjectMessageFacade) message)
+                    ((AmqpJmsObjectMessageFacade) message).setUseAmqpTypedEncoding(rc);
                 } else {
                     throw new MessageFormatException(JMS_AMQP_TYPED_ENCODING + " is only applicable to ObjectMessage");
                 }
@@ -156,9 +156,6 @@ public class AmqpJmsMessagePropertyIntercepter {
             @Override
             public boolean propertyExists(AmqpJmsMessageFacade message) {
                 if (message instanceof AmqpJmsObjectMessageFacade) {
-                    // TODO - See notes in AmqpObjectMessageFacade about whether this should
-                    //        always be exposed for ObjectMessage or only if it's currently
-                    //        the case that the message uses the AMQP typed encoding.
                     return ((AmqpJmsObjectMessageFacade) message).isAmqpTypedEncoding();
                 }
 

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d94144cc/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java
index c55e682..694192b 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java
@@ -120,7 +120,27 @@ public class AmqpJmsObjectMessageFacade extends AmqpJmsMessageFacade implements
 
     @Override
     public void onSend() {
-        // TODO instruct delegate to encode the proper content type into the message.
+        delegate.onSend();
+    }
+
+    void setUseAmqpTypedEncoding(boolean useAmqpTypedEncoding) throws JMSException {
+        if (useAmqpTypedEncoding && delegate instanceof AmqpSerializedObjectDelegate) {
+            AmqpTypedObjectDelegate newDelegate = new AmqpTypedObjectDelegate(message);
+            try {
+                newDelegate.setObject(delegate.getObject());
+            } catch (ClassNotFoundException | IOException e) {
+                throw JmsExceptionSupport.create(e);
+            }
+            delegate = newDelegate;
+        } else if (delegate instanceof AmqpTypedObjectDelegate) {
+            AmqpSerializedObjectDelegate newDelegate = new AmqpSerializedObjectDelegate(message);
+            try {
+                newDelegate.setObject(delegate.getObject());
+            } catch (ClassNotFoundException | IOException e) {
+                throw JmsExceptionSupport.create(e);
+            }
+            delegate = newDelegate;
+        }
     }
 
     private void initDelegate(boolean useAmqpTypes) {

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d94144cc/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpObjectTypeDelegate.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpObjectTypeDelegate.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpObjectTypeDelegate.java
index cfa6237..ce95700 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpObjectTypeDelegate.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpObjectTypeDelegate.java
@@ -47,4 +47,10 @@ public interface AmqpObjectTypeDelegate {
      */
     Serializable getObject() throws IOException, ClassNotFoundException;
 
+    /**
+     * Signals that the message is about to be sent or dispatched to a consumer, ensure
+     * proper state of the marshaled object and message annotations prior to that.
+     */
+    void onSend();
+
 }

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d94144cc/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpSerializedObjectDelegate.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpSerializedObjectDelegate.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpSerializedObjectDelegate.java
index 72db9dc..3d974e2 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpSerializedObjectDelegate.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpSerializedObjectDelegate.java
@@ -98,4 +98,8 @@ public class AmqpSerializedObjectDelegate implements AmqpObjectTypeDelegate {
 
         // TODO: ensure content type is [still] set?
     }
+
+    @Override
+    public void onSend() {
+    }
 }

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d94144cc/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpTypedObjectDelegate.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpTypedObjectDelegate.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpTypedObjectDelegate.java
index 234caaa..f5d8f0c 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpTypedObjectDelegate.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpTypedObjectDelegate.java
@@ -94,6 +94,10 @@ public class AmqpTypedObjectDelegate implements AmqpObjectTypeDelegate {
         // TODO: ensure content type is not set (assuming we aren't using data sections)?
     }
 
+    @Override
+    public void onSend() {
+    }
+
     private boolean isSupportedAmqpValueObjectType(Serializable serializable) {
         // TODO: augment supported types to encode as an AmqpValue?
         return serializable instanceof Map<?,?> ||

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d94144cc/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepterTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepterTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepterTest.java
index 1059e7b..972622b 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepterTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepterTest.java
@@ -133,7 +133,7 @@ public class AmqpJmsMessagePropertyIntercepterTest {
     public void testSetJmsAmqpTypedEncoding() throws JMSException {
         AmqpJmsObjectMessageFacade message = Mockito.mock(AmqpJmsObjectMessageFacade.class);
         AmqpJmsMessagePropertyIntercepter.setProperty(message, JMS_AMQP_TYPED_ENCODING, true);
-        // TODO
+        Mockito.verify(message).setUseAmqpTypedEncoding(true);
     }
 
     @Test
@@ -149,4 +149,24 @@ public class AmqpJmsMessagePropertyIntercepterTest {
         assertEquals(false, AmqpJmsMessagePropertyIntercepter.getProperty(message, JMS_AMQP_TYPED_ENCODING));
     }
 
+    @Test
+    public void testGetJmsAmqpTypedEncodingWhenUsingAmqpTypes() throws JMSException {
+        AmqpJmsObjectMessageFacade message = Mockito.mock(AmqpJmsObjectMessageFacade.class);
+        Mockito.when(message.isAmqpTypedEncoding()).thenReturn(true);
+        assertEquals(true, AmqpJmsMessagePropertyIntercepter.getProperty(message, JMS_AMQP_TYPED_ENCODING));
+    }
+
+    @Test
+    public void testJmsAmqpTypedEncodingNotInPropertyNamesWhenNotSet() throws JMSException {
+        AmqpJmsObjectMessageFacade message = Mockito.mock(AmqpJmsObjectMessageFacade.class);
+        Mockito.when(message.isAmqpTypedEncoding()).thenReturn(false);
+        assertFalse(AmqpJmsMessagePropertyIntercepter.getPropertyNames(message).contains(JMS_AMQP_TYPED_ENCODING));
+    }
+
+    @Test
+    public void testJmsAmqpTypedEncodingInPropertyNamesWhenSet() throws JMSException {
+        AmqpJmsObjectMessageFacade message = Mockito.mock(AmqpJmsObjectMessageFacade.class);
+        Mockito.when(message.isAmqpTypedEncoding()).thenReturn(true);
+        assertTrue(AmqpJmsMessagePropertyIntercepter.getPropertyNames(message).contains(JMS_AMQP_TYPED_ENCODING));
+    }
 }


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