Author: fmui
Date: Mon Jul  4 13:42:16 2016
New Revision: 1751286

URL: http://svn.apache.org/viewvc?rev=1751286&view=rev
Log:
CMIS-987: fixed AtomPub extension handling

Modified:
    chemistry/portcmis/trunk/PortCMIS/binding/atompub/XmlWalker.cs
    chemistry/portcmis/trunk/PortCMIS/data/Extensions.cs

Modified: chemistry/portcmis/trunk/PortCMIS/binding/atompub/XmlWalker.cs
URL: 
http://svn.apache.org/viewvc/chemistry/portcmis/trunk/PortCMIS/binding/atompub/XmlWalker.cs?rev=1751286&r1=1751285&r2=1751286&view=diff
==============================================================================
--- chemistry/portcmis/trunk/PortCMIS/binding/atompub/XmlWalker.cs (original)
+++ chemistry/portcmis/trunk/PortCMIS/binding/atompub/XmlWalker.cs Mon Jul  4 
13:42:16 2016
@@ -127,54 +127,62 @@ namespace PortCMIS.Binding.AtomPub
                 {
                     attributes.Add(parser.Name, parser.Value);
                 }
-            }
 
-            XmlUtils.Next(parser);
+                parser.MoveToElement();
+            }
 
-            while (true)
+            if (!parser.IsEmptyElement)
             {
-                XmlNodeType nodeType = parser.NodeType;
-                if (nodeType == XmlNodeType.EndElement)
-                {
-                    break;
-                }
-                else if (nodeType == XmlNodeType.Text)
+                XmlUtils.Next(parser);
+
+                while (true)
                 {
-                    string s = parser.Value;
-                    if (s != null)
+                    XmlNodeType nodeType = parser.NodeType;
+                    if (nodeType == XmlNodeType.EndElement)
+                    {
+                        break;
+                    }
+                    else if (nodeType == XmlNodeType.Text || nodeType == 
XmlNodeType.CDATA)
                     {
-                        if (sb.Length + s.Length > 
XmlConstraints.MaxStringLength)
+                        char[] buffer = new char[8 * 1024];
+
+                        int len;
+                        while ((len = parser.ReadValueChunk(buffer, 0, 
buffer.Length)) > 0)
                         {
-                            throw new CmisInvalidArgumentException("String 
limit exceeded! (String is longer than " + XmlConstraints.MaxStringLength + " 
characters.)");
+                            if (sb.Length + len > 
XmlConstraints.MaxStringLength)
+                            {
+                                throw new CmisInvalidArgumentException("String 
limit exceeded! (String is longer than " + XmlConstraints.MaxStringLength + " 
characters.)");
+                            }
+
+                            sb.Append(buffer, 0, len);
                         }
-                        sb.Append(s);
                     }
-                }
-                else if (nodeType == XmlNodeType.Element)
-                {
-                    if (level + 1 > XmlConstraints.MaxExtensionsDepth)
+                    else if (nodeType == XmlNodeType.Element)
                     {
-                        throw new CmisInvalidArgumentException("Extensions 
tree too deep! (More than " + XmlConstraints.MaxExtensionsDepth + " levels.)");
-                    }
+                        if (level + 1 > XmlConstraints.MaxExtensionsDepth)
+                        {
+                            throw new CmisInvalidArgumentException("Extensions 
tree too deep! (More than " + XmlConstraints.MaxExtensionsDepth + " levels.)");
+                        }
 
-                    if (children == null)
-                    {
-                        children = new List<ICmisExtensionElement>();
-                    }
+                        if (children == null)
+                        {
+                            children = new List<ICmisExtensionElement>();
+                        }
 
-                    if (children.Count + 1 > XmlConstraints.MaxExtensionsWidth)
-                    {
-                        throw new CmisInvalidArgumentException("Extensions 
tree too wide! (More than " + XmlConstraints.MaxExtensionsWidth + " extensions 
on one level.)");
-                    }
+                        if (children.Count + 1 > 
XmlConstraints.MaxExtensionsWidth)
+                        {
+                            throw new CmisInvalidArgumentException("Extensions 
tree too wide! (More than " + XmlConstraints.MaxExtensionsWidth + " extensions 
on one level.)");
+                        }
 
-                    children.Add(HandleExtensionLevel(parser, level + 1));
+                        children.Add(HandleExtensionLevel(parser, level + 1));
 
-                    continue;
-                }
+                        continue;
+                    }
 
-                if (!XmlUtils.Next(parser))
-                {
-                    break;
+                    if (!XmlUtils.Next(parser))
+                    {
+                        break;
+                    }
                 }
             }
 

Modified: chemistry/portcmis/trunk/PortCMIS/data/Extensions.cs
URL: 
http://svn.apache.org/viewvc/chemistry/portcmis/trunk/PortCMIS/data/Extensions.cs?rev=1751286&r1=1751285&r2=1751286&view=diff
==============================================================================
--- chemistry/portcmis/trunk/PortCMIS/data/Extensions.cs (original)
+++ chemistry/portcmis/trunk/PortCMIS/data/Extensions.cs Mon Jul  4 13:42:16 
2016
@@ -75,6 +75,46 @@ namespace PortCMIS.Data.Extensions
 
         /// <inheritdoc/>
         public IList<ICmisExtensionElement> Children { get; set; }
+
+        /// <inheritdoc/>
+        public override string ToString()
+        {
+            StringBuilder sb = new StringBuilder();
+
+            if (Namespace != null)
+            {
+                sb.Append("{" + Namespace + "}");
+            }
+
+            sb.Append(Name);
+            sb.Append(": ");
+
+            if (Value != null)
+            {
+                sb.Append(Value);
+            }
+            else if (Children != null)
+            {
+                sb.Append("[");
+                bool first = true;
+                foreach (ICmisExtensionElement ext in Children)
+                {
+                    if (first)
+                    {
+                        first = false;
+                    }
+                    else
+                    {
+                        sb.Append(", ");
+                    }
+
+                    sb.Append(ext.ToString());
+                }
+                sb.Append("]");
+            }
+
+            return sb.ToString();
+        }
     }
 
     /// <summary>


Reply via email to