Author: jgomes
Date: Tue Feb  9 22:43:52 2010
New Revision: 908263

URL: http://svn.apache.org/viewvc?rev=908263&view=rev
Log:
Merge fix for Byte Order Mark bug.
Fixes [AMQNET-230]. (See https://issues.apache.org/activemq/browse/AMQNET-230)

Modified:
    activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/   (props changed)
    
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/MessageExtensions.cs
    
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/MessageProducerExtensions.cs
    
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/SessionExtensions.cs
    
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/Util/Convert.cs
    
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/Util/XmlUtils.cs
    activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/vs2008-nms-test.csproj   
(props changed)
    activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/vs2008-nms.csproj   
(props changed)

Propchange: activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/
------------------------------------------------------------------------------
    svn:mergeinfo = /activemq/activemq-dotnet/Apache.NMS/trunk:907867

Modified: 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/MessageExtensions.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/MessageExtensions.cs?rev=908263&r1=908262&r2=908263&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/MessageExtensions.cs
 (original)
+++ 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/MessageExtensions.cs
 Tue Feb  9 22:43:52 2010
@@ -35,29 +35,13 @@
                /// <summary>
                /// Deserializes the object from Xml, and returns it.
                /// </summary>
-               public static object ToObject(this IMessage message, Encoding 
encoding)
-               {
-                       return ToObject<object>(message, encoding);
-               }
-
-               /// <summary>
-               /// Deserializes the object from Xml, and returns it.
-               /// </summary>
                public static T ToObject<T>(this IMessage message) where T : 
class
                {
-                       return ToObject<T>(message, Encoding.Unicode);
-               }
-
-               /// <summary>
-               /// Deserializes the object from Xml, and returns it.
-               /// </summary>
-               public static T ToObject<T>(this IMessage message, Encoding 
encoding) where T : class
-               {
                        try
                        {
                                if(null != message)
                                {
-                                       return (T) 
NMSConvert.DeserializeObjFromMessage(message, encoding);
+                                       return (T) 
NMSConvert.DeserializeObjFromMessage(message);
                                }
                        }
                        catch(Exception ex)

Modified: 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/MessageProducerExtensions.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/MessageProducerExtensions.cs?rev=908263&r1=908262&r2=908263&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/MessageProducerExtensions.cs
 (original)
+++ 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/MessageProducerExtensions.cs
 Tue Feb  9 22:43:52 2010
@@ -1,4 +1,4 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -29,15 +29,7 @@
                /// </summary>
                public static ITextMessage CreateXmlMessage(this 
IMessageProducer producer, object obj)
                {
-                       return CreateXmlMessage(producer, obj, 
Encoding.Unicode);
-               }
-
-               /// <summary>
-               /// Extension function to create a text message from an object. 
 The object must be serializable to XML.
-               /// </summary>
-               public static ITextMessage CreateXmlMessage(this 
IMessageProducer producer, object obj, Encoding encoding)
-               {
-                       return 
NMSConvert.SerializeObjToMessage(producer.CreateTextMessage(), obj, encoding);
+                       return 
NMSConvert.SerializeObjToMessage(producer.CreateTextMessage(), obj);
                }
 
                /// <summary>
@@ -49,14 +41,6 @@
                }
 
                /// <summary>
-               /// Sends the message to the default destination for this 
producer.  The object must be serializable to XML.
-               /// </summary>
-               public static void Send(this IMessageProducer producer, object 
objMessage, Encoding encoding)
-               {
-                       producer.Send(producer.CreateXmlMessage(objMessage, 
encoding));
-               }
-
-               /// <summary>
                /// Sends the message to the default destination with the 
explicit QoS configuration.  The object must be serializable to XML.
                /// </summary>
                public static void Send(this IMessageProducer producer, object 
objMessage, MsgDeliveryMode deliveryMode, MsgPriority priority, TimeSpan 
timeToLive)
@@ -65,14 +49,6 @@
                }
 
                /// <summary>
-               /// Sends the message to the default destination with the 
explicit QoS configuration.  The object must be serializable to XML.
-               /// </summary>
-               public static void Send(this IMessageProducer producer, object 
objMessage, Encoding encoding, MsgDeliveryMode deliveryMode, MsgPriority 
priority, TimeSpan timeToLive)
-               {
-                       producer.Send(producer.CreateXmlMessage(objMessage, 
encoding), deliveryMode, priority, timeToLive);
-               }
-
-               /// <summary>
                /// Sends the message to the given destination
                /// </summary>
                public static void Send(this IMessageProducer producer, 
IDestination destination, object objMessage)
@@ -81,28 +57,12 @@
                }
 
                /// <summary>
-               /// Sends the message to the given destination
-               /// </summary>
-               public static void Send(this IMessageProducer producer, 
IDestination destination, object objMessage, Encoding encoding)
-               {
-                       producer.Send(destination, 
producer.CreateXmlMessage(objMessage, encoding));
-               }
-
-               /// <summary>
                /// Sends the message to the given destination with the 
explicit QoS configuration.  The object must be serializable to XML.
                /// </summary>
                public static void Send(this IMessageProducer producer, 
IDestination destination, object objMessage, MsgDeliveryMode deliveryMode, 
MsgPriority priority, TimeSpan timeToLive)
                {
                        producer.Send(destination, 
producer.CreateXmlMessage(objMessage), deliveryMode, priority, timeToLive);
                }
-
-               /// <summary>
-               /// Sends the message to the given destination with the 
explicit QoS configuration.  The object must be serializable to XML.
-               /// </summary>
-               public static void Send(this IMessageProducer producer, 
IDestination destination, object objMessage, Encoding encoding, MsgDeliveryMode 
deliveryMode, MsgPriority priority, TimeSpan timeToLive)
-               {
-                       producer.Send(destination, 
producer.CreateXmlMessage(objMessage, encoding), deliveryMode, priority, 
timeToLive);
-               }
        }
 #endif
 }

Modified: 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/SessionExtensions.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/SessionExtensions.cs?rev=908263&r1=908262&r2=908263&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/SessionExtensions.cs
 (original)
+++ 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/SessionExtensions.cs
 Tue Feb  9 22:43:52 2010
@@ -28,15 +28,7 @@
                /// </summary>
                public static ITextMessage CreateXmlMessage(this ISession 
session, object obj)
                {
-                       return CreateXmlMessage(session, obj, Encoding.Unicode);
-               }
-
-               /// <summary>
-               /// Extension function to create a text message from an object. 
 The object must be serializable to XML.
-               /// </summary>
-               public static ITextMessage CreateXmlMessage(this ISession 
session, object obj, Encoding encoding)
-               {
-                       return 
NMSConvert.SerializeObjToMessage(session.CreateTextMessage(), obj, encoding);
+                       return 
NMSConvert.SerializeObjToMessage(session.CreateTextMessage(), obj);
                }
 
                /// <summary>

Modified: 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/Util/Convert.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/Util/Convert.cs?rev=908263&r1=908262&r2=908263&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/Util/Convert.cs
 (original)
+++ 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/Util/Convert.cs
 Tue Feb  9 22:43:52 2010
@@ -64,18 +64,7 @@
 #endif
                public static ITextMessage ToXmlMessage(IMessageProducer 
producer, object obj)
                {
-                       return ToXmlMessage(producer, obj, Encoding.Unicode);
-               }
-
-               /// <summary>
-               /// Convert an object into a text message.  The object must be 
serializable to XML.
-               /// </summary>
-#if NET_3_5 || MONO
-               [Obsolete]
-#endif
-               public static ITextMessage ToXmlMessage(IMessageProducer 
producer, object obj, Encoding encoding)
-               {
-                       return 
SerializeObjToMessage(producer.CreateTextMessage(), obj, encoding);
+                       return 
SerializeObjToMessage(producer.CreateTextMessage(), obj);
                }
 
                /// <summary>
@@ -86,18 +75,7 @@
 #endif
                public static ITextMessage ToXmlMessage(ISession session, 
object obj)
                {
-                       return ToXmlMessage(session, obj, Encoding.Unicode);
-               }
-
-               /// <summary>
-               /// Convert an object into a text message.  The object must be 
serializable to XML.
-               /// </summary>
-#if NET_3_5 || MONO
-               [Obsolete]
-#endif
-               public static ITextMessage ToXmlMessage(ISession session, 
object obj, Encoding encoding)
-               {
-                       return 
SerializeObjToMessage(session.CreateTextMessage(), obj, encoding);
+                       return 
SerializeObjToMessage(session.CreateTextMessage(), obj);
                }
 
                /// <summary>
@@ -108,7 +86,7 @@
 #endif
                public static object FromXmlMessage(IMessage message)
                {
-                       return DeserializeObjFromMessage(message, 
Encoding.Unicode);
+                       return DeserializeObjFromMessage(message);
                }
 
                /// <summary>
@@ -117,13 +95,12 @@
                /// </summary>
                /// <param name="message"></param>
                /// <param name="obj"></param>
-               /// <param name="encoding"></param>
                /// <returns></returns>
-               internal static ITextMessage SerializeObjToMessage(ITextMessage 
message, object obj, Encoding encoding)
+               internal static ITextMessage SerializeObjToMessage(ITextMessage 
message, object obj)
                {
                        // Embed the type into the message
                        message.NMSType = obj.GetType().FullName;
-                       message.Text = XmlUtil.Serialize(obj, encoding);
+                       message.Text = XmlUtil.Serialize(obj);
                        return message;
                }
 
@@ -131,9 +108,8 @@
                /// Deserialize the object from the text message.  The object 
must be serializable from XML.
                /// </summary>
                /// <param name="message"></param>
-               /// <param name="encoding"></param>
                /// <returns></returns>
-               internal static object DeserializeObjFromMessage(IMessage 
message, Encoding encoding)
+               internal static object DeserializeObjFromMessage(IMessage 
message)
                {
                        ITextMessage textMessage = message as ITextMessage;
 
@@ -155,7 +131,7 @@
                                return null;
                        }
 
-                       return XmlUtil.Deserialize(objType, textMessage.Text, 
encoding);
+                       return XmlUtil.Deserialize(objType, textMessage.Text);
                }
 
                /// <summary>

Modified: 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/Util/XmlUtils.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/Util/XmlUtils.cs?rev=908263&r1=908262&r2=908263&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/Util/XmlUtils.cs
 (original)
+++ 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/src/main/csharp/Util/XmlUtils.cs
 Tue Feb  9 22:43:52 2010
@@ -20,6 +20,7 @@
 using System.Text;
 using System.Xml;
 using System.Xml.Serialization;
+using System.Text.RegularExpressions;
 
 namespace Apache.NMS.Util
 {
@@ -30,28 +31,18 @@
        {
                public static string Serialize(object obj)
                {
-                       return Serialize(obj, Encoding.Unicode);
-               }
-
-               public static string Serialize(object obj, Encoding encoding)
-               {
                        try
                        {
-                               MemoryStream memoryStream = new MemoryStream();
+                               StringBuilder outputStringBuilder = new 
StringBuilder();
                                XmlSerializer serializer = new 
XmlSerializer(obj.GetType());
-                               XmlTextWriter xmlTextWriter = new 
XmlTextWriter(memoryStream, encoding);
+                               XmlWriter xmlWriter = 
XmlWriter.Create(outputStringBuilder);
 
-                               /*
-                                * If the XML document has been altered with 
unknown
-                                * nodes or attributes, handle them with the
-                                * UnknownNode and UnknownAttribute events.
-                                */
-                               serializer.UnknownNode += new 
XmlNodeEventHandler(serializer_UnknownNode);
-                               serializer.UnknownAttribute += new 
XmlAttributeEventHandler(serializer_UnknownAttribute);
-                               serializer.Serialize(xmlTextWriter, obj);
-                               memoryStream = (MemoryStream) 
xmlTextWriter.BaseStream;
-                               byte[] encodedBytes = memoryStream.ToArray();
-                               return encoding.GetString(encodedBytes, 0, 
encodedBytes.Length);
+                               // Set the error handlers.
+                               serializer.UnknownNode += 
serializer_UnknownNode;
+                               serializer.UnknownElement += 
serializer_UnknownElement;
+                               serializer.UnknownAttribute += 
serializer_UnknownAttribute;
+                               serializer.Serialize(xmlWriter, obj);
+                               return outputStringBuilder.ToString();
                        }
                        catch(Exception ex)
                        {
@@ -62,11 +53,6 @@
 
                public static object Deserialize(Type objType, string text)
                {
-                       return Deserialize(objType, text, Encoding.Unicode);
-               }
-
-               public static object Deserialize(Type objType, string text, 
Encoding encoding)
-               {
                        if(null == text)
                        {
                                return null;
@@ -75,16 +61,12 @@
                        try
                        {
                                XmlSerializer serializer = new 
XmlSerializer(objType);
-                               MemoryStream memoryStream = new 
MemoryStream(encoding.GetBytes(text));
 
-                               /*
-                                * If the XML document has been altered with 
unknown
-                                * nodes or attributes, handle them with the
-                                * UnknownNode and UnknownAttribute events.
-                                */
-                               serializer.UnknownNode += new 
XmlNodeEventHandler(serializer_UnknownNode);
-                               serializer.UnknownAttribute += new 
XmlAttributeEventHandler(serializer_UnknownAttribute);
-                               return serializer.Deserialize(memoryStream);
+                               // Set the error handlers.
+                               serializer.UnknownNode += 
serializer_UnknownNode;
+                               serializer.UnknownElement += 
serializer_UnknownElement;
+                               serializer.UnknownAttribute += 
serializer_UnknownAttribute;
+                               return serializer.Deserialize(new 
StringReader(text));
                        }
                        catch(Exception ex)
                        {
@@ -93,11 +75,34 @@
                        }
                }
 
+               /// <summary>
+               /// From xml spec valid chars:
+               /// #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | 
[#x10000-#x10FFFF]    
+               /// any Unicode character, excluding the surrogate blocks, 
FFFE, and FFFF.
+               /// </summary>
+               private static string invalidXMLMatch = 
@"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]";
+               private static Regex regexInvalidXMLChars = new 
Regex(invalidXMLMatch);
+
+               /// <summary>
+               /// This removes characters that are invalid for xml encoding
+               /// </summary>
+               /// <param name="text">Text to be encoded.</param>
+               /// <returns>Text with invalid xml characters removed.</returns>
+               public static string CleanInvalidXmlChars(string text)
+               {
+                       return regexInvalidXMLChars.Replace(text, "");
+               }
+
                private static void serializer_UnknownNode(object sender, 
XmlNodeEventArgs e)
                {
                        Tracer.ErrorFormat("Unknown Node: {0}\t{1}", e.Name, 
e.Text);
                }
 
+               private static void serializer_UnknownElement(object sender, 
XmlElementEventArgs e)
+               {
+                       Tracer.ErrorFormat("Unknown Element: {0}\t{1}", 
e.Element.Name, e.Element.Value);
+               }
+
                private static void serializer_UnknownAttribute(object sender, 
XmlAttributeEventArgs e)
                {
                        Tracer.ErrorFormat("Unknown attribute: {0}='{1}'", 
e.Attr.Name, e.Attr.Value);

Propchange: 
activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/vs2008-nms-test.csproj
            ('svn:mergeinfo' removed)

Propchange: activemq/activemq-dotnet/Apache.NMS/branches/1.2.x/vs2008-nms.csproj
            ('svn:mergeinfo' removed)


Reply via email to