DotCMIS/Alfresco: "error in XML document" when calling GetRootFolder

1.5k views Asked by At

With DotCMIS I can successfully start a session to an Alfresco 4.0.1 CMIS server.
But when I call session.GetRootFolder(), I get the exception below:

Unhandled Exception: DotCMIS.Exceptions.CmisConnectionException: Parsing exception! ---> System.InvalidOperationException: There is an error in XML document. ---> System.InvalidOperationException: Read by order only possible for encoded/bare format
  at System.Xml.Serialization.ClassMap.GetElement (Int32 index) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadMembers (System.Xml.Serialization.ClassMap map, System.Object ob, Boolean isValueList, Boolean readBySoapOrder) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadClassInstanceMembers (System.Xml.Serialization.XmlTypeMapping typeMap, System.Object ob) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadClassInstance (System.Xml.Serialization.XmlTypeMapping typeMap, Boolean isNullable, Boolean checkType) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadObject (System.Xml.Serialization.XmlTypeMapping typeMap, Boolean isNullable, Boolean checkType) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadObjectElement (System.Xml.Serialization.XmlTypeMapElementInfo elem) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadMembers (System.Xml.Serialization.ClassMap map, System.Object ob, Boolean isValueList, Boolean readBySoapOrder) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadClassInstanceMembers (System.Xml.Serialization.XmlTypeMapping typeMap, System.Object ob) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadClassInstance (System.Xml.Serialization.XmlTypeMapping typeMap, Boolean isNullable, Boolean checkType) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadObject (System.Xml.Serialization.XmlTypeMapping typeMap, Boolean isNullable, Boolean checkType) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadRoot (System.Xml.Serialization.XmlTypeMapping rootMap) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadRoot () [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializer.Deserialize (System.Xml.Serialization.XmlSerializationReader reader) [0x00000] in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at System.Xml.Serialization.XmlSerializer.Deserialize (System.Xml.Serialization.XmlSerializationReader reader) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializer.Deserialize (System.Xml.XmlReader xmlReader) [0x00000] in <filename unknown>:0 
  at DotCMIS.Binding.AtomPub.AtomPubParser.DeserializeObject (System.Xml.XmlReader reader) [0x00000] in <filename unknown>:0 
  at DotCMIS.Binding.AtomPub.AtomPubParser.ParseElement (System.Xml.XmlReader reader) [0x00000] in <filename unknown>:0 
  at DotCMIS.Binding.AtomPub.AtomPubParser.ParseEntry (System.Xml.XmlReader reader) [0x00000] in <filename unknown>:0 
  at DotCMIS.Binding.AtomPub.AtomPubParser.Parse () [0x00000] in <filename unknown>:0 
  at DotCMIS.Binding.AtomPub.AbstractAtomPubService.Parse[AtomEntry] (System.IO.Stream stream) [0x00000] in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at DotCMIS.Binding.AtomPub.AbstractAtomPubService.Parse[AtomEntry] (System.IO.Stream stream) [0x00000] in <filename unknown>:0 
  at DotCMIS.Binding.AtomPub.AbstractAtomPubService.GetObjectInternal (System.String repositoryId, IdentifierType idOrPath, System.String objectIdOrPath, Nullable`1 returnVersion, System.String filter, Nullable`1 includeAllowableActions, Nullable`1 includeRelationships, System.String renditionFilter, Nullable`1 includePolicyIds, Nullable`1 includeAcl, IExtensionsData extension) [0x00000] in <filename unknown>:0 
  at DotCMIS.Binding.AtomPub.ObjectService.GetObject (System.String repositoryId, System.String objectId, System.String filter, Nullable`1 includeAllowableActions, Nullable`1 includeRelationships, System.String renditionFilter, Nullable`1 includePolicyIds, Nullable`1 includeAcl, IExtensionsData extension) [0x00000] in <filename unknown>:0 
  at DotCMIS.Client.Impl.Session.GetObject (System.String objectId, IOperationContext context) [0x00000] in <filename unknown>:0 
  at DotCMIS.Client.Impl.Session.GetObject (IObjectId objectId, IOperationContext context) [0x00000] in <filename unknown>:0 
  at DotCMIS.Client.Impl.Session.GetRootFolder (IOperationContext context) [0x00000] in <filename unknown>:0 
  at DotCMIS.Client.Impl.Session.GetRootFolder () [0x00000] in <filename unknown>:0 
  at tests.sln.MainClass.Main (System.String[] args) [0x00074] in /home/nico/src/CmisSync/tests/tests.sln/Main.cs:27 
[ERROR] FATAL UNHANDLED EXCEPTION: DotCMIS.Exceptions.CmisConnectionException: Parsing exception! ---> System.InvalidOperationException: There is an error in XML document. ---> System.InvalidOperationException: Read by order only possible for encoded/bare format
  at System.Xml.Serialization.ClassMap.GetElement (Int32 index) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadMembers (System.Xml.Serialization.ClassMap map, System.Object ob, Boolean isValueList, Boolean readBySoapOrder) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadClassInstanceMembers (System.Xml.Serialization.XmlTypeMapping typeMap, System.Object ob) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadClassInstance (System.Xml.Serialization.XmlTypeMapping typeMap, Boolean isNullable, Boolean checkType) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadObject (System.Xml.Serialization.XmlTypeMapping typeMap, Boolean isNullable, Boolean checkType) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadObjectElement (System.Xml.Serialization.XmlTypeMapElementInfo elem) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadMembers (System.Xml.Serialization.ClassMap map, System.Object ob, Boolean isValueList, Boolean readBySoapOrder) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadClassInstanceMembers (System.Xml.Serialization.XmlTypeMapping typeMap, System.Object ob) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadClassInstance (System.Xml.Serialization.XmlTypeMapping typeMap, Boolean isNullable, Boolean checkType) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadObject (System.Xml.Serialization.XmlTypeMapping typeMap, Boolean isNullable, Boolean checkType) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadRoot (System.Xml.Serialization.XmlTypeMapping rootMap) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadRoot () [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializer.Deserialize (System.Xml.Serialization.XmlSerializationReader reader) [0x00000] in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at System.Xml.Serialization.XmlSerializer.Deserialize (System.Xml.Serialization.XmlSerializationReader reader) [0x00000] in <filename unknown>:0 
  at System.Xml.Serialization.XmlSerializer.Deserialize (System.Xml.XmlReader xmlReader) [0x00000] in <filename unknown>:0 
  at DotCMIS.Binding.AtomPub.AtomPubParser.DeserializeObject (System.Xml.XmlReader reader) [0x00000] in <filename unknown>:0 
  at DotCMIS.Binding.AtomPub.AtomPubParser.ParseElement (System.Xml.XmlReader reader) [0x00000] in <filename unknown>:0 
  at DotCMIS.Binding.AtomPub.AtomPubParser.ParseEntry (System.Xml.XmlReader reader) [0x00000] in <filename unknown>:0 
  at DotCMIS.Binding.AtomPub.AtomPubParser.Parse () [0x00000] in <filename unknown>:0 
  at DotCMIS.Binding.AtomPub.AbstractAtomPubService.Parse[AtomEntry] (System.IO.Stream stream) [0x00000] in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at DotCMIS.Binding.AtomPub.AbstractAtomPubService.Parse[AtomEntry] (System.IO.Stream stream) [0x00000] in <filename unknown>:0 
  at DotCMIS.Binding.AtomPub.AbstractAtomPubService.GetObjectInternal (System.String repositoryId, IdentifierType idOrPath, System.String objectIdOrPath, Nullable`1 returnVersion, System.String filter, Nullable`1 includeAllowableActions, Nullable`1 includeRelationships, System.String renditionFilter, Nullable`1 includePolicyIds, Nullable`1 includeAcl, IExtensionsData extension) [0x00000] in <filename unknown>:0 
  at DotCMIS.Binding.AtomPub.ObjectService.GetObject (System.String repositoryId, System.String objectId, System.String filter, Nullable`1 includeAllowableActions, Nullable`1 includeRelationships, System.String renditionFilter, Nullable`1 includePolicyIds, Nullable`1 includeAcl, IExtensionsData extension) [0x00000] in <filename unknown>:0 
  at DotCMIS.Client.Impl.Session.GetObject (System.String objectId, IOperationContext context) [0x00000] in <filename unknown>:0 
  at DotCMIS.Client.Impl.Session.GetObject (IObjectId objectId, IOperationContext context) [0x00000] in <filename unknown>:0 
  at DotCMIS.Client.Impl.Session.GetRootFolder (IOperationContext context) [0x00000] in <filename unknown>:0 
  at DotCMIS.Client.Impl.Session.GetRootFolder () [0x00000] in <filename unknown>:0 

An important part seems to be: Read by order only possible for encoded/bare format

My code is pretty much straight from the tutorial:

using System;
using System.Collections.Generic;
using DotCMIS;
using DotCMIS.Client.Impl;
using DotCMIS.Client;
using DotCMIS.Data.Impl;
using DotCMIS.Data.Extensions;
namespace tests.sln
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            // Connect to repository
            Dictionary<string, string> parameters = new Dictionary<string, string>();
            parameters[SessionParameter.BindingType] = BindingType.AtomPub;
            parameters[SessionParameter.AtomPubUrl] = "http://localhost:8080/alfresco/cmisatom";
            parameters[SessionParameter.User] = "admin";
            parameters[SessionParameter.Password] = "admin";
            SessionFactory factory = SessionFactory.NewInstance();
            ISession session = factory.GetRepositories(parameters)[0].CreateSession();
            Console.WriteLine("Created CMIS session: " + session.ToString());

            // Get the root folder
            IFolder rootFolder = session.GetRootFolder(); // Error happens here
        }
    }
}

What did I miss?

In debug mode I can see DotCMIS.Client.Impl.Session.GetObject (objectId="workspace://SpacesStore/77acb21f-811c-49a3-be4d-5cc7f177f461" in the stack, not sure what it means but 77acb21f-811c-49a3-be4d-5cc7f177f461 is indeed the node reference of Alfresco's company_home.

If I change the URL to http://localhost:8080/alfresco/service/cmisatom in the code above, then a Not Found error appears earlier, at the GetRepositories line. So I am pretty sure my URL is correct.

I downloaded the DotCMIS source code and am debugging it in Monodevelop now.

With Wireshark I have identified the packet on which the exception happens:

<?xml version='1.0' encoding='UTF-8'?><atom:entry xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/" xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/" xmlns:app="http://www.w3.org/2007/app"><atom:author><atom:name>System</atom:name></atom:author><atom:id>http://chemistry.apache.org/d29ya3NwYWNlOi8vU3BhY2VzU3RvcmUvNzdhY2IyMWYtODExYy00OWEzLWJlNGQtNWNjN2YxNzdmNDYx</atom:id><atom:published>2012-06-08T04:46:12Z</atom:published><atom:title>Company Home</atom:title><app:edited>2012-06-08T04:46:22Z</app:edited><atom:updated>2012-06-08T04:46:22Z</atom:updated><cmisra:object xmlns:ns3="http://docs.oasis-open.org/ns/cmis/messaging/200908/"><cmis:properties><cmis:propertyId queryName="cmis:allowedChildObjectTypeIds" displayName="Allowed Child Object Types Ids" localName="allowedChildObjectTypeIds" propertyDefinitionId="cmis:allowedChildObjectTypeIds" /><cmis:propertyId queryName="cmis:objectTypeId" displayName="Object Type Id" localName="objectTypeId" propertyDefinitionId="cmis:objectTypeId"><cmis:value>cmis:folder</cmis:value></cmis:propertyId><cmis:propertyString queryName="cmis:path" displayName="Path" localName="path" propertyDefinitionId="cmis:path"><cmis:value>/</cmis:value></cmis:propertyString><cmis:propertyString queryName="cmis:name" displayName="Name" localName="name" propertyDefinitionId="cmis:name"><cmis:value>Company Home</cmis:value></cmis:propertyString><cmis:propertyDateTime queryName="cmis:creationDate" displayName="Creation Date" localName="creationDate" propertyDefinitionId="cmis:creationDate"><cmis:value>2012-06-08T13:46:12.655+09:00</cmis:value></cmis:propertyDateTime><cmis:propertyString queryName="cmis:changeToken" displayName="Change token" localName="changeToken" propertyDefinitionId="cmis:changeToken" /><cmis:propertyString queryName="cmis:lastModifiedBy" displayName="Last Modified By" localName="lastModifiedBy" propertyDefinitionId="cmis:lastModifiedBy"><cmis:value>System</cmis:value></cmis:propertyString><cmis:propertyString queryName="cmis:createdBy" displayName="Created by" localName="createdBy" propertyDefinitionId="cmis:createdBy"><cmis:value>System</cmis:value></cmis:propertyString><cmis:propertyId queryName="cmis:objectId" displayName="Object Id" localName="objectId" propertyDefinitionId="cmis:objectId"><cmis:value>workspace://SpacesStore/77acb21f-811c-49a3-be4d-5cc7f177f461</cmis:value></cmis:propertyId><cmis:propertyId queryName="cmis:baseTypeId" displayName="Base Type Id" localName="baseTypeId" propertyDefinitionId="cmis:baseTypeId"><cmis:value>cmis:folder</cmis:value></cmis:propertyId><cmis:propertyId queryName="alfcmis:nodeRef" displayName="Alfresco Node Ref" localName="nodeRef" propertyDefinitionId="alfcmis:nodeRef"><cmis:value>workspace://SpacesStore/77acb21f-811c-49a3-be4d-5cc7f177f461</cmis:value></cmis:propertyId><cmis:propertyDateTime queryName="cmis:lastModificationDate" displayName="Last Modified Date" localName="lastModificationDate" propertyDefinitionId="cmis:lastModificationDate"><cmis:value>2012-06-08T13:46:22.049+09:00</cmis:value></cmis:propertyDateTime><cmis:propertyId queryName="cmis:parentId" displayName="Parent Id" localName="parentId" propertyDefinitionId="cmis:parentId" /><aspects:aspects xmlns="http://www.alfresco.org" xmlns:aspects="http://www.alfresco.org"><appliedAspects>P:app:uifacets</appliedAspects><properties><cmis:propertyString xmlns="http://docs.oasis-open.org/ns/cmis/core/200908/" propertyDefinitionId="app:icon"><value>space-icon-default</value></cmis:propertyString><cmis:propertyString xmlns="http://docs.oasis-open.org/ns/cmis/core/200908/" propertyDefinitionId="cm:description"><value>The company root space</value></cmis:propertyString><cmis:propertyString xmlns="http://docs.oasis-open.org/ns/cmis/core/200908/" propertyDefinitionId="cmis:policyText" /><cmis:propertyString xmlns="http://docs.oasis-open.org/ns/cmis/core/200908/" propertyDefinitionId="cm:title"><value>Company Home</value></cmis:propertyString></properties><appliedAspects>P:cm:titled</appliedAspects><appliedAspects>P:sys:localized</appliedAspects></aspects:aspects></cmis:properties><cmis:allowableActions><cmis:canDeleteObject>false</cmis:canDeleteObject><cmis:canUpdateProperties>true</cmis:canUpdateProperties><cmis:canGetFolderTree>true</cmis:canGetFolderTree><cmis:canGetProperties>true</cmis:canGetProperties><cmis:canGetObjectRelationships>true</cmis:canGetObjectRelationships><cmis:canGetObjectParents>false</cmis:canGetObjectParents><cmis:canGetFolderParent>false</cmis:canGetFolderParent><cmis:canGetDescendants>true</cmis:canGetDescendants><cmis:canMoveObject>false</cmis:canMoveObject><cmis:canDeleteContentStream>false</cmis:canDeleteContentStream><cmis:canCheckOut>false</cmis:canCheckOut><cmis:canCancelCheckOut>false</cmis:canCancelCheckOut><cmis:canCheckIn>false</cmis:canCheckIn><cmis:canSetContentStream>false</cmis:canSetContentStream><cmis:canGetAllVersions>false</cmis:canGetAllVersions><cmis:canAddObjectToFolder>false</cmis:canAddObjectToFolder><cmis:canRemoveObjectFromFolder>false</cmis:canRemoveObjectFromFolder><cmis:canGetContentStream>false</cmis:canGetContentStream><cmis:canApplyPolicy>false</cmis:canApplyPolicy><cmis:canGetAppliedPolicies>true</cmis:canGetAppliedPolicies><cmis:canRemovePolicy>false</cmis:canRemovePolicy><cmis:canGetChildren>true</cmis:canGetChildren><cmis:canCreateDocument>true</cmis:canCreateDocument><cmis:canCreateFolder>true</cmis:canCreateFolder><cmis:canCreateRelationship>true</cmis:canCreateRelationship><cmis:canDeleteTree>false</cmis:canDeleteTree><cmis:canGetRenditions>false</cmis:canGetRenditions><cmis:canGetACL>true</cmis:canGetACL><cmis:canApplyACL>true</cmis:canApplyACL></cmis:allowableActions></cmisra:object><atom:link rel="service" href="http://localhost:8080/alfresco/cmisatom/200a3d48-6a94-4cb7-b1bd-186eb6be0c4e?repositoryId=200a3d48-6a94-4cb7-b1bd-186eb6be0c4e" type="application/atomsvc+xml" /><atom:link rel="self" href="http://localhost:8080/alfresco/cmisatom/200a3d48-6a94-4cb7-b1bd-186eb6be0c4e/entry?id=workspace%3A%2F%2FSpacesStore%2F77acb21f-811c-49a3-be4d-5cc7f177f461" type="application/atom+xml;type=entry" cmisra:id="workspace://SpacesStore/77acb21f-811c-49a3-be4d-5cc7f177f461" /><atom:link rel="enclosure" href="http://localhost:8080/alfresco/cmisatom/200a3d48-6a94-4cb7-b1bd-186eb6be0c4e/entry?id=workspace%3A%2F%2FSpacesStore%2F77acb21f-811c-49a3-be4d-5cc7f177f461" type="application/atom+xml;type=entry" /><atom:link rel="edit" href="http://localhost:8080/alfresco/cmisatom/200a3d48-6a94-4cb7-b1bd-186eb6be0c4e/entry?id=workspace%3A%2F%2FSpacesStore%2F77acb21f-811c-49a3-be4d-5cc7f177f461" type="application/atom+xml;type=entry" /><atom:link rel="describedby" href="http://localhost:8080/alfresco/cmisatom/200a3d48-6a94-4cb7-b1bd-186eb6be0c4e/type?id=cmis%3Afolder" type="application/atom+xml;type=entry" /><atom:link rel="http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions" href="http://localhost:8080/alfresco/cmisatom/200a3d48-6a94-4cb7-b1bd-186eb6be0c4e/allowableactions?id=workspace%3A%2F%2FSpacesStore%2F77acb21f-811c-49a3-be4d-5cc7f177f461" type="application/cmisallowableactions+xml" /><atom:link rel="down" href="http://localhost:8080/alfresco/cmisatom/200a3d48-6a94-4cb7-b1bd-186eb6be0c4e/children?id=workspace%3A%2F%2FSpacesStore%2F77acb21f-811c-49a3-be4d-5cc7f177f461" type="application/atom+xml;type=feed" /><atom:link rel="down" href="http://localhost:8080/alfresco/cmisatom/200a3d48-6a94-4cb7-b1bd-186eb6be0c4e/descendants?id=workspace%3A%2F%2FSpacesStore%2F77acb21f-811c-49a3-be4d-5cc7f177f461" type="application/cmistree+xml" /><atom:link rel="http://docs.oasis-open.org/ns/cmis/link/200908/foldertree" href="http://localhost:8080/alfresco/cmisatom/200a3d48-6a94-4cb7-b1bd-186eb6be0c4e/foldertree?id=workspace%3A%2F%2FSpacesStore%2F77acb21f-811c-49a3-be4d-5cc7f177f461" type="application/cmistree+xml" /><atom:link rel="http://docs.oasis-open.org/ns/cmis/link/200908/acl" href="http://localhost:8080/alfresco/cmisatom/200a3d48-6a94-4cb7-b1bd-186eb6be0c4e/acl?id=workspace%3A%2F%2FSpacesStore%2F77acb21f-811c-49a3-be4d-5cc7f177f461" type="application/cmisacl+xml" /><atom:link rel="http://docs.oasis-open.org/ns/cmis/link/200908/policies" href="http://localhost:8080/alfresco/cmisatom/200a3d48-6a94-4cb7-b1bd-186eb6be0c4e/policies?id=workspace%3A%2F%2FSpacesStore%2F77acb21f-811c-49a3-be4d-5cc7f177f461" type="application/atom+xml;type=feed" /><atom:link rel="http://docs.oasis-open.org/ns/cmis/link/200908/relationships" href="http://localhost:8080/alfresco/cmisatom/200a3d48-6a94-4cb7-b1bd-186eb6be0c4e/relationships?id=workspace%3A%2F%2FSpacesStore%2F77acb21f-811c-49a3-be4d-5cc7f177f461" type="application/atom+xml;type=feed" /></atom:entry>

It is valid XML.

1

There are 1 answers

4
Florian Müller On BEST ANSWER

It is a Mono bug. Mono crashes on <xsd:choice>.
See https://bugzilla.xamarin.com/show_bug.cgi?id=2907


Sub-answer:

You are using the old Alfresco CMIS URL.

Check:

http://localhost:8080/alfresco/service/cmis/index.html