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 <tabish...@gmail.com> Authored: Fri Sep 26 11:27:09 2014 -0400 Committer: Timothy Bish <tabish...@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-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org