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
}
}