You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2014/02/03 21:19:35 UTC

svn commit: r1564046 - /activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/DefaultMessageConverter.cs

Author: tabish
Date: Mon Feb  3 20:19:35 2014
New Revision: 1564046

URL: http://svn.apache.org/r1564046
Log:
https://issues.apache.org/jira/browse/AMQNET-454

applied:
https://issues.apache.org/jira/secure/attachment/12626730/Apache.NMS.AMQP-fix-list-message-body-15.patch

Modified:
    activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/DefaultMessageConverter.cs

Modified: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/DefaultMessageConverter.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/DefaultMessageConverter.cs?rev=1564046&r1=1564045&r2=1564046&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/DefaultMessageConverter.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/DefaultMessageConverter.cs Mon Feb  3 20:19:35 2014
@@ -17,6 +17,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.IO;
 using System.Text;
 using Apache.NMS.Util;
@@ -189,7 +190,10 @@ namespace Apache.NMS.Amqp
             else if (message is ObjectMessage)
             {
                 ObjectMessage objectMessage = message as ObjectMessage;
-                Message result = new Message(objectMessage.Body);
+                Collection<object> objs = new Collection<object>();
+                objs = ConvertObjectToAmqpList(objectMessage.Body);
+
+                Message result = new Message(objs);
                 return result;
             }
             else if (message is MapMessage)
@@ -234,7 +238,11 @@ namespace Apache.NMS.Amqp
             }
             else if ("amqp/list" == message.ContentType)
             {
-                // TODO: Return list message 
+                Collection<object> coll = new Collection<object>();
+                message.GetContent(coll);
+                ObjectMessage objMessage = new ObjectMessage();
+                objMessage.Body = ConvertAmqpListToObject(coll);
+                result = objMessage;
             }
             else
             {
@@ -298,5 +306,60 @@ namespace Apache.NMS.Amqp
             return dict;
         }
         #endregion
+
+        #region AMQP List Conversion Methods
+
+        /// <summary>
+        /// Convert NMS Object message body into form used by amqp/list
+        /// </summary>
+        /// <param name="objectMessageBody">The generic object from NMS</param>
+        /// <returns>A collection of supported AMQP primitive types.
+        /// Throws if objectMessageBody is not an array.</returns>
+        public Collection<object> ConvertObjectToAmqpList(Object objectMessageBody)
+        {
+            Collection<object> result = null;
+
+            if (objectMessageBody.GetType().IsArray)
+            {
+                result = new Collection<object>();
+                Array valueArray = (Array)objectMessageBody;
+                foreach (object val in valueArray)
+                {
+                    result.Add(val);
+                }
+            }
+            else
+            {
+                throw new NMSException("NMS ObjectMessage body must be an array");
+            }
+            return result;
+        }
+
+
+        /// <summary>
+        /// Convert amqp/list to  NMS Object message body
+        /// </summary>
+        /// <param name="amqpList">A collection of AMQP primitive types</param>
+        /// <returns>An array object holding the AMPQ list.</returns>
+        public Object ConvertAmqpListToObject(Collection<object> amqpList)
+        {
+            object result = new object();
+
+            if (amqpList.Count > 0)
+            {
+                Type t = amqpList[0].GetType();
+
+                Array objs = Array.CreateInstance(t, amqpList.Count);
+                for (int i = 0; i < amqpList.Count; i++)
+                {
+                    objs.SetValue(amqpList[i], i);
+                }
+
+                result = objs;
+            }
+            return result;
+        }
+
+        #endregion
     }
 }