You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by mi...@apache.org on 2019/09/13 19:28:31 UTC

[activemq-nms-amqp] branch master updated: AMQNET-612: ObjectMessage shouldn't have jms-msg-type set

This is an automated email from the ASF dual-hosted git repository.

michaelpearce pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-nms-amqp.git


The following commit(s) were added to refs/heads/master by this push:
     new 3e0f0ba  AMQNET-612: ObjectMessage shouldn't have jms-msg-type set
     new ab1cb2e  Merge pull request #31 from Havret/do_not_add_jms_msg_type_to_dot_net_serializable_object_msg
3e0f0ba is described below

commit 3e0f0baf2f3952c7d5037c6b66a1d49b1f4a6848
Author: Havret <h4...@gmail.com>
AuthorDate: Wed Sep 11 23:51:44 2019 +0200

    AMQNET-612: ObjectMessage shouldn't have jms-msg-type set
---
 src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs   |  2 +-
 src/NMS.AMQP/Provider/Amqp/Message/AmqpCodec.cs    | 24 +++++++++++++---------
 .../Amqp/Message/AmqpNmsBytesMessageFacade.cs      |  2 +-
 .../Amqp/Message/AmqpNmsMapMessageFacade.cs        |  2 +-
 .../Provider/Amqp/Message/AmqpNmsMessageFacade.cs  |  2 +-
 .../Amqp/Message/AmqpNmsObjectMessageFacade.cs     |  2 +-
 .../Amqp/Message/AmqpNmsStreamMessageFacade.cs     |  2 +-
 .../Amqp/Message/AmqpNmsTextMessageFacade.cs       |  2 +-
 .../Message/Facade/NmsTestMessageFacade.cs         |  2 +-
 .../Provider/Amqp/AmqpCodecTest.cs                 |  1 -
 .../Provider/Amqp/AmqpMessageFactoryTest.cs        |  4 ++--
 .../Amqp/AmqpNmsObjectMessageFacadeTest.cs         |  2 +-
 12 files changed, 25 insertions(+), 22 deletions(-)

diff --git a/src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs b/src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs
index 4b855ff..f6e7a94 100644
--- a/src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs
+++ b/src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs
@@ -38,7 +38,7 @@ namespace Apache.NMS.AMQP.Message.Facade
         string GroupId { get; set; }
         uint GroupSequence { get; set; }
         DateTime? Expiration { get; set; }
-        sbyte JmsMsgType { get; }
+        sbyte? JmsMsgType { get; }
         
         /// <summary>
         /// True if this message is tagged as being persistent
diff --git a/src/NMS.AMQP/Provider/Amqp/Message/AmqpCodec.cs b/src/NMS.AMQP/Provider/Amqp/Message/AmqpCodec.cs
index f371610..299657f 100644
--- a/src/NMS.AMQP/Provider/Amqp/Message/AmqpCodec.cs
+++ b/src/NMS.AMQP/Provider/Amqp/Message/AmqpCodec.cs
@@ -28,7 +28,7 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
         public static INmsMessageFacade DecodeMessage(IAmqpConsumer consumer, global::Amqp.Message amqpMessage)
         {
             // First we try the easy way, if the annotation is there we don't have to work hard.
-            AmqpNmsMessageFacade result = CreateFromMsgAnnotation(amqpMessage.MessageAnnotations);
+            AmqpNmsMessageFacade result = CreateFromMsgAnnotation(amqpMessage);
             if (result == null)
             {
                 // Next, match specific section structures and content types
@@ -44,9 +44,9 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
             throw new NMSException("Could not create a NMS message from incoming message");
         }
 
-        private static AmqpNmsMessageFacade CreateFromMsgAnnotation(MessageAnnotations messageAnnotations)
+        private static AmqpNmsMessageFacade CreateFromMsgAnnotation(global::Amqp.Message message)
         {
-            object annotation = messageAnnotations?[SymbolUtil.JMSX_OPT_MSG_TYPE];
+            object annotation = message.MessageAnnotations?[SymbolUtil.JMSX_OPT_MSG_TYPE];
 
             if (annotation != null)
             {
@@ -55,16 +55,19 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
                 {
                     case MessageSupport.JMS_TYPE_MSG:
                         return new AmqpNmsMessageFacade();
-                    case MessageSupport.JMS_TYPE_BYTE:
-                        return new AmqpNmsBytesMessageFacade();
                     case MessageSupport.JMS_TYPE_TXT:
                         return new AmqpNmsTextMessageFacade();
-                    case MessageSupport.JMS_TYPE_OBJ:
-                        return new AmqpNmsObjectMessageFacade();
                     case MessageSupport.JMS_TYPE_STRM:
                         return new AmqpNmsStreamMessageFacade();
                     case MessageSupport.JMS_TYPE_MAP:
                         return new AmqpNmsMapMessageFacade();
+                    case MessageSupport.JMS_TYPE_BYTE:
+                    // Java serialized objects should be treated as bytes messages
+                    // as we cannot deserialize them in .NET world
+                    case MessageSupport.JMS_TYPE_OBJ when IsContentType(SymbolUtil.SERIALIZED_JAVA_OBJECT_CONTENT_TYPE, GetContentType(message.Properties)):
+                        return new AmqpNmsBytesMessageFacade();
+                    case MessageSupport.JMS_TYPE_OBJ:
+                        return new AmqpNmsObjectMessageFacade();
                     default:
                         throw new NMSException("Invalid Message Type annotation value found in message: " + annotation);
                 }
@@ -130,9 +133,10 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
         {
             if (messageFacade.Message.MessageAnnotations == null) 
                 messageFacade.Message.MessageAnnotations = new MessageAnnotations();
-            
-            messageFacade.Message.MessageAnnotations[SymbolUtil.JMSX_OPT_MSG_TYPE] = messageFacade.JmsMsgType;
-            
+
+            if (messageFacade.JmsMsgType.HasValue) 
+                messageFacade.Message.MessageAnnotations[SymbolUtil.JMSX_OPT_MSG_TYPE] = messageFacade.JmsMsgType.Value;
+
             AmqpDestinationHelper.SetToAnnotationFromDestination(messageFacade.NMSDestination, messageFacade.Message.MessageAnnotations);
             AmqpDestinationHelper.SetReplyToAnnotationFromDestination(messageFacade.NMSReplyTo, messageFacade.Message.MessageAnnotations);
         }
diff --git a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsBytesMessageFacade.cs b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsBytesMessageFacade.cs
index 84e167e..e61ddfb 100644
--- a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsBytesMessageFacade.cs
+++ b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsBytesMessageFacade.cs
@@ -33,7 +33,7 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
 
         private static readonly Data EMPTY_DATA = new Data { Binary = new byte[0] };
 
-        public override sbyte JmsMsgType => MessageSupport.JMS_TYPE_BYTE;
+        public override sbyte? JmsMsgType => MessageSupport.JMS_TYPE_BYTE;
         public long BodyLength => GetBinaryFromBody().Binary.LongLength;
 
         public BinaryReader GetDataReader()
diff --git a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMapMessageFacade.cs b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMapMessageFacade.cs
index 8be31cf..ae09084 100644
--- a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMapMessageFacade.cs
+++ b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMapMessageFacade.cs
@@ -29,7 +29,7 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
         private AMQPValueMap map;
         public IPrimitiveMap Map => map;
 
-        public override sbyte JmsMsgType => MessageSupport.JMS_TYPE_MAP;
+        public override sbyte? JmsMsgType => MessageSupport.JMS_TYPE_MAP;
 
         protected override void InitializeEmptyBody()
         {
diff --git a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMessageFacade.cs b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMessageFacade.cs
index 6766602..183f215 100644
--- a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMessageFacade.cs
+++ b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMessageFacade.cs
@@ -333,7 +333,7 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
         }
 
         public MessageAnnotations MessageAnnotations => Message.MessageAnnotations;
-        public virtual sbyte JmsMsgType => MessageSupport.JMS_TYPE_MSG;
+        public virtual sbyte? JmsMsgType => MessageSupport.JMS_TYPE_MSG;
 
         /// <summary>
         /// The annotation value for the JMS Message content type.  For a generic JMS message this
diff --git a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsObjectMessageFacade.cs b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsObjectMessageFacade.cs
index 115521c..3e64d71 100644
--- a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsObjectMessageFacade.cs
+++ b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsObjectMessageFacade.cs
@@ -35,7 +35,7 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
             set => Delegate.Object = value;
         }
 
-        public override sbyte JmsMsgType => MessageSupport.JMS_TYPE_OBJ;
+        public override sbyte? JmsMsgType => typeDelegate is AmqpTypedObjectDelegate ? (sbyte?) MessageSupport.JMS_TYPE_OBJ : null;
 
         public override void OnSend(TimeSpan producerTtl)
         {
diff --git a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsStreamMessageFacade.cs b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsStreamMessageFacade.cs
index 509f7ef..18fc051 100644
--- a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsStreamMessageFacade.cs
+++ b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsStreamMessageFacade.cs
@@ -30,7 +30,7 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
         private IList list;
         private int position = 0;
         
-        public override sbyte JmsMsgType => MessageSupport.JMS_TYPE_STRM;
+        public override sbyte? JmsMsgType => MessageSupport.JMS_TYPE_STRM;
 
         public object Peek()
         {
diff --git a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsTextMessageFacade.cs b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsTextMessageFacade.cs
index 01610d6..dd3cf81 100644
--- a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsTextMessageFacade.cs
+++ b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsTextMessageFacade.cs
@@ -83,7 +83,7 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
             }
         }
 
-        public override sbyte JmsMsgType => MessageSupport.JMS_TYPE_TXT;
+        public override sbyte? JmsMsgType => MessageSupport.JMS_TYPE_TXT;
 
         private static string DecodeBinaryBody(byte[] body)
         {
diff --git a/test/Apache-NMS-AMQP-Test/Message/Facade/NmsTestMessageFacade.cs b/test/Apache-NMS-AMQP-Test/Message/Facade/NmsTestMessageFacade.cs
index b1d017d..cc3a697 100644
--- a/test/Apache-NMS-AMQP-Test/Message/Facade/NmsTestMessageFacade.cs
+++ b/test/Apache-NMS-AMQP-Test/Message/Facade/NmsTestMessageFacade.cs
@@ -75,7 +75,7 @@ namespace NMS.AMQP.Test.Message.Facade
         public string GroupId { get; set; }
         public uint GroupSequence { get; set; }
         public DateTime? Expiration { get; set; }
-        public sbyte JmsMsgType { get; }
+        public sbyte? JmsMsgType { get; }
         public bool IsPersistent { get; set; }
 
         public INmsMessageFacade Copy()
diff --git a/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpCodecTest.cs b/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpCodecTest.cs
index ffeb404..5677366 100644
--- a/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpCodecTest.cs
+++ b/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpCodecTest.cs
@@ -458,7 +458,6 @@ namespace NMS.AMQP.Test.Provider.Amqp
             DoTestNMSMessageEncodingAddsProperMessageAnnotations(MessageSupport.JMS_TYPE_MAP, null, MessageSupport.JMS_DEST_TYPE_TEMP_QUEUE);
             DoTestNMSMessageEncodingAddsProperMessageAnnotations(MessageSupport.JMS_TYPE_TXT, MessageSupport.JMS_DEST_TYPE_TOPIC, MessageSupport.JMS_DEST_TYPE_TEMP_QUEUE);
             DoTestNMSMessageEncodingAddsProperMessageAnnotations(MessageSupport.JMS_TYPE_STRM, MessageSupport.JMS_DEST_TYPE_QUEUE, MessageSupport.JMS_DEST_TYPE_TEMP_QUEUE);
-            DoTestNMSMessageEncodingAddsProperMessageAnnotations(MessageSupport.JMS_TYPE_OBJ, MessageSupport.JMS_DEST_TYPE_QUEUE, MessageSupport.JMS_DEST_TYPE_TEMP_QUEUE);
         }
 
         private void DoTestNMSMessageEncodingAddsProperMessageAnnotations(sbyte msgType, byte? toType, byte? replyToType)
diff --git a/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpMessageFactoryTest.cs b/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpMessageFactoryTest.cs
index 450963a..562048f 100644
--- a/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpMessageFactoryTest.cs
+++ b/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpMessageFactoryTest.cs
@@ -121,7 +121,7 @@ namespace NMS.AMQP.Test.Provider.Amqp
 
             Assert.IsInstanceOf<NmsObjectMessage>(message);
             Assert.IsInstanceOf<AmqpNmsObjectMessageFacade>(facade);
-            Assert.AreEqual(MessageSupport.JMS_TYPE_OBJ, facade.JmsMsgType);
+            Assert.IsNull(facade.JmsMsgType);
 
             Assert.IsNull(((AmqpNmsObjectMessageFacade) facade).Body);
         }
@@ -137,7 +137,7 @@ namespace NMS.AMQP.Test.Provider.Amqp
 
             Assert.IsInstanceOf<NmsObjectMessage>(message);
             Assert.IsInstanceOf<AmqpNmsObjectMessageFacade>(facade);
-            Assert.AreEqual(MessageSupport.JMS_TYPE_OBJ, facade.JmsMsgType);
+            Assert.IsNull(facade.JmsMsgType);
 
             AmqpNmsObjectMessageFacade objectMessageFacade = (AmqpNmsObjectMessageFacade) facade;
 
diff --git a/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpNmsObjectMessageFacadeTest.cs b/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpNmsObjectMessageFacadeTest.cs
index 015b64b..29a077f 100644
--- a/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpNmsObjectMessageFacadeTest.cs
+++ b/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpNmsObjectMessageFacadeTest.cs
@@ -39,7 +39,7 @@ namespace NMS.AMQP.Test.Provider.Amqp
             AmqpNmsObjectMessageFacade amqpObjectMessageFacade = CreateNewObjectMessageFacade(false);
             Assert.Null(amqpObjectMessageFacade.MessageAnnotations);
 
-            Assert.AreEqual(MessageSupport.JMS_TYPE_OBJ, amqpObjectMessageFacade.JmsMsgType);
+            Assert.IsNull(amqpObjectMessageFacade.JmsMsgType);
         }
 
         [Test]