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>