Author: tabish Date: Tue Jan 5 17:21:24 2016 New Revision: 1723134 URL: http://svn.apache.org/viewvc?rev=1723134&view=rev Log: Ensure that the message body is always marshaled. Fixes case of a single message -> receive -> send -> receive which would lose its body on the re-send.
AMQNET-514 Fixes [AMQNET-AMQNET-514]. (See https://issues.apache.org/jira/browse/AMQNET-AMQNET-514) Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.7.x/ (props changed) activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.7.x/src/main/csharp/Commands/ActiveMQMapMessage.cs activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.7.x/src/test/csharp/Commands/ActiveMQMapMessageTest.cs Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.7.x/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Jan 5 17:21:24 2016 @@ -1,4 +1,4 @@ /activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x:1082291,1135831,1137081,1171843,1171874,1177390,1177395,1186568,1187123,1238881,1293360,1294890,1295257,1311395,1312026,1374469,1375295,1376782 /activemq/activemq-dotnet/Apache.NMS.ActiveMQ/tags/1.0.0:692591,693525 /activemq/activemq-dotnet/Apache.NMS.ActiveMQ/tags/1.1.0:788230,788233,790183 -/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk:1689517,1695609-1695737,1705945,1715303 +/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk:1689517,1695609-1695737,1705945,1715303,1723133 Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.7.x/src/main/csharp/Commands/ActiveMQMapMessage.cs URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.7.x/src/main/csharp/Commands/ActiveMQMapMessage.cs?rev=1723134&r1=1723133&r2=1723134&view=diff ============================================================================== --- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.7.x/src/main/csharp/Commands/ActiveMQMapMessage.cs (original) +++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.7.x/src/main/csharp/Commands/ActiveMQMapMessage.cs Tue Jan 5 17:21:24 2016 @@ -91,11 +91,7 @@ namespace Apache.NMS.ActiveMQ.Commands public override void BeforeMarshall(OpenWireFormat wireFormat) { - if(body == null) - { - Content = null; - } - else + if (this.Content == null && this.body != null && this.body.Count > 0) { MemoryStream buffer = new MemoryStream(); Stream target = buffer; Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.7.x/src/test/csharp/Commands/ActiveMQMapMessageTest.cs URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.7.x/src/test/csharp/Commands/ActiveMQMapMessageTest.cs?rev=1723134&r1=1723133&r2=1723134&view=diff ============================================================================== --- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.7.x/src/test/csharp/Commands/ActiveMQMapMessageTest.cs (original) +++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.7.x/src/test/csharp/Commands/ActiveMQMapMessageTest.cs Tue Jan 5 17:21:24 2016 @@ -19,15 +19,17 @@ using System; using System.Collections; using System.Globalization; using System.Text; +using Apache.NMS; +using Apache.NMS.Test; +using Apache.NMS.Util; using Apache.NMS.ActiveMQ.Commands; using NUnit.Framework; namespace Apache.NMS.ActiveMQ.Test.Commands { [TestFixture] - public class ActiveMQMapMessageTest + public class ActiveMQMapMessageTest : NMSTestSupport { - private string name = "testName"; [Test] @@ -305,7 +307,6 @@ namespace Apache.NMS.ActiveMQ.Test.Comma catch(MessageFormatException) { } - } [Test] @@ -457,7 +458,8 @@ namespace Apache.NMS.ActiveMQ.Test.Comma { } - try { + try + { msg.Body.SetFloat("float", 1.5f); Assert.Fail("should throw exception"); } @@ -543,6 +545,47 @@ namespace Apache.NMS.ActiveMQ.Test.Comma msg.Body.GetShort("short"); msg.Body.GetString("string"); } - + + [Test] + public void TestMessageQueueDequeQueueDequeue() + { + using (IConnection connection = CreateConnection()) + using (ISession session = connection.CreateSession()) + { + IDestination destination = session.GetQueue("TestMessageQueueDequeQueueDequeue"); + + (connection as Connection).DeleteDestination(destination); + + using (IMessageConsumer consumer = session.CreateConsumer(destination)) + using (IMessageProducer producer = session.CreateProducer(destination)) + { + connection.Start(); + + producer.DeliveryMode = MsgDeliveryMode.Persistent; + + IMapMessage request = session.CreateMapMessage(); + request.Body.SetString("Unit-Test-Key", "Unit-Test-Value"); + Assert.IsNotNull(request, "request is null"); + Assert.IsTrue(request.Body.Contains("Unit-Test-Key"), "Unit-Test-Key does not exist"); + producer.Send(request); + + // Relay from Queue back again. + IMessage received = consumer.Receive(TimeSpan.FromSeconds(2)); + Assert.IsNotNull(received); + IMapMessage mapMessage = received as IMapMessage; + Assert.IsNotNull(mapMessage); + producer.Send(mapMessage); + + // Read it again and validate. + received = consumer.Receive(TimeSpan.FromSeconds(2)); + Assert.IsNotNull(received); + mapMessage = received as IMapMessage; + Assert.IsNotNull(mapMessage, "currentMessage is null"); + + // This entry in the map message should not be removed + Assert.IsTrue(mapMessage.Body.Contains("Unit-Test-Key"), "Unit-Test-Key does not exist"); + } + } + } } }