.NET WCF and createDocument

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-26-2012 08:37 PM
I am having a problem adding documents to Alfresco using the createDocument method. I am using the public Alfresco 4.x CMIS Content Repository for testing (http://cmis.alfresco.com/)
I can query, view, delete, update etc. I can also add documents using the code below to other CMIS vendor repositories, but with Alfresco I get an error:
Property cmis
bjectTypeId must be set!
The following is sample code to reproduce issue:
I have checked forums, but have not been able to find an answer.
I can query, view, delete, update etc. I can also add documents using the code below to other CMIS vendor repositories, but with Alfresco I get an error:
Property cmis

The following is sample code to reproduce issue:
Dim ws As New WS_CMIS.ObjectServicePortClient(….) ws.ClientCredentials.UserName.UserName = "admin" ws.ClientCredentials.UserName.Password = "admin" Dim props As New cmisPropertiesType() Dim propName As New cmisPropertyString propName.propertyDefinitionId = "cmis:name" propName.value = New String() {"Test"} Dim propClass As New cmisPropertyString propClass.propertyDefinitionId = "cmis:objectTypeId" propClass.value = New String() {"cmis:document"} props.Items = New cmisProperty() {propClass, propName} Dim stream As New cmisContentStreamType() stream.stream = FileUpload1.FileBytes stream.mimeType = FileUpload1.PostedFile.ContentType stream.filename = FileUpload1.FileName stream.length = FileUpload1.PostedFile.ContentLength ws.createDocument("371554cd-ac06-40ba-98b8-e6b60275cca7", props, "workspace://SpacesStore/87b2f129-3ad0-4a46-a6ea-05ecbfb54aa1", stream, enumVersioningState.major, Nothing, Nothing, Nothing, Nothing)
I have checked forums, but have not been able to find an answer.
Labels:
- Labels:
-
Archive
5 REPLIES 5
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-27-2012 12:02 PM
I see you creating the props variable and adding propClass and propName to it, but I don't see where you are passing props to the createDocument method.
Jeff
Jeff

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-27-2012 12:10 PM
Sorry I had replaced my variables with literal strings before posting the code, and the "props" parameter had been deleted. I updated the code above to include the props argument that I am passing.
This same code snippet works with an IBM P8 CM system, but fails with Alfesco.
This same code snippet works with an IBM P8 CM system, but fails with Alfesco.

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-28-2012 06:27 PM
I did a Fiddler trace, and the cmis
bjectTypeId value is being passed to Alfresco, but I get the error saying that it is not being passed.
Request:
Response:

Request:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <s:Header> <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <u:Timestamp u:Id="_0"> <u:Created>2012-03-28T22:08:03.235Z</u:Created> <u:Expires>2012-03-28T22:13:03.235Z</u:Expires> </u:Timestamp> <o:UsernameToken u:Id="uuid-dec73595-c2fe-47c9-8a82-ccb3e98af4cb-18"> <o:Username>admin</o:Username> <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">admin</o:Password> </o:UsernameToken> </o:Security> </s:Header> <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <createDocument xmlns="http://docs.oasis-open.org/ns/cmis/messaging/200908/"> <repositoryId>371554cd-ac06-40ba-98b8-e6b60275cca7</repositoryId> <properties> <propertyString propertyDefinitionId="cmis:objectTypeId" xmlns="http://docs.oasis-open.org/ns/cmis/core/200908/"> <value>cmis:document</value> </propertyString> <propertyString propertyDefinitionId="cmis:name" xmlns="http://docs.oasis-open.org/ns/cmis/core/200908/"> <value>HJ Test</value> </propertyString> </properties> <folderId>workspace://SpacesStore/87b2f129-3ad0-4a46-a6ea-05ecbfb54aa1</folderId> <contentStream> <length>2338411</length> <mimeType>application/pdf</mimeType> <filename>cmis-spec-v1.0.pdf</filename> <stream>TRUNCATED</stream> </contentStream> <versioningState>major</versioningState> <addACEs xsi:nil="true"/> <removeACEs xsi:nil="true"/> <extension xsi:nil="true"/> </createDocument> </s:Body></s:Envelope>
Response:
<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Header> <Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <Timestamp xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <Created>2012-03-28T22:08:13Z</Created> <Expires>2012-03-29T22:08:13Z</Expires> </Timestamp> </Security> </S:Header> <S:Body> <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope"> <faultcode>S:Server</faultcode> <faultstring>Property cmis:objectTypeId must be set!</faultstring> <detail> <ns2:cmisFault xmlns:ns2="http://docs.oasis-open.org/ns/cmis/messaging/200908/" xmlns="http://docs.oasis-open.org/ns/cmis/core/200908/"> <ns2:type>invalidArgument</ns2:type> <ns2:code>0</ns2:code> <ns2:message>Property cmis:objectTypeId must be set!</ns2:message> <stacktrace:stacktrace xmlns:stacktrace="http://chemistry.apache.org/opencmis/exception" xmlns="http://chemistry.apache.org/opencmis/exception"> org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException: Property cmis:objectTypeId must be set! at org.alfresco.opencmis.CMISConnector.getObjectTypeIdProperty(CMISConnector.java:2524) at org.alfresco.opencmis.AlfrescoCmisService.createDocument(AlfrescoCmisService.java:1198) at org.apache.chemistry.opencmis.server.support.CmisServiceWrapper.createDocument(CmisServiceWrapper.java:666) at org.apache.chemistry.opencmis.server.impl.webservices.ObjectService.createDocument(ObjectService.java:79) at sun.reflect.GeneratedMethodAccessor5324.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.sun.xml.ws.api.server.InstanceResolver$1.invoke(InstanceResolver.java:246) at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146) at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257) at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:93) at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:598) at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:557) at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:542) at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:439) at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:243) at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:471) at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244) at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:135) at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:129) at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:160) at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:75) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:58) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:427) at org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler.process(AjpAprProtocol.java:384) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584) at java.lang.Thread.run(Thread.java:662) </stacktrace:stacktrace> </ns2:cmisFault> <ns2:exception xmlns:ns2="http://jax-ws.dev.java.net/" class="org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException" note="To disable this feature, set com.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace system property to false"> <message>Property cmis:objectTypeId must be set!</message> <ns2:stackTrace> <ns2:frame class="org.apache.chemistry.opencmis.server.impl.webservices.AbstractService" file="AbstractService.java" line="205" method="convertException"/> <ns2:frame class="org.apache.chemistry.opencmis.server.impl.webservices.ObjectService" file="ObjectService.java" line="89" method="createDocument"/> <ns2:frame class="sun.reflect.GeneratedMethodAccessor5324" line="unknown" method="invoke"/> <ns2:frame class="sun.reflect.DelegatingMethodAccessorImpl" file="DelegatingMethodAccessorImpl.java" line="25" method="invoke"/> <ns2:frame class="java.lang.reflect.Method" file="Method.java" line="597" method="invoke"/> <ns2:frame class="com.sun.xml.ws.api.server.InstanceResolver$1" file="InstanceResolver.java" line="246" method="invoke"/> <ns2:frame class="com.sun.xml.ws.server.InvokerTube$2" file="InvokerTube.java" line="146" method="invoke"/> <ns2:frame class="com.sun.xml.ws.server.sei.EndpointMethodHandler" file="EndpointMethodHandler.java" line="257" method="invoke"/> <ns2:frame class="com.sun.xml.ws.server.sei.SEIInvokerTube" file="SEIInvokerTube.java" line="93" method="processRequest"/> <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="598" method="__doRun"/> <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="557" method="_doRun"/> <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="542" method="doRun"/> <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="439" method="runSync"/> <ns2:frame class="com.sun.xml.ws.server.WSEndpointImpl$2" file="WSEndpointImpl.java" line="243" method="process"/> <ns2:frame class="com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit" file="HttpAdapter.java" line="471" method="handle"/> <ns2:frame class="com.sun.xml.ws.transport.http.HttpAdapter" file="HttpAdapter.java" line="244" method="handle"/> <ns2:frame class="com.sun.xml.ws.transport.http.servlet.ServletAdapter" file="ServletAdapter.java" line="135" method="handle"/> <ns2:frame class="com.sun.xml.ws.transport.http.servlet.WSServletDelegate" file="WSServletDelegate.java" line="129" method="doGet"/> <ns2:frame class="com.sun.xml.ws.transport.http.servlet.WSServletDelegate" file="WSServletDelegate.java" line="160" method="doPost"/> <ns2:frame class="com.sun.xml.ws.transport.http.servlet.WSServlet" file="WSServlet.java" line="75" method="doPost"/> <ns2:frame class="javax.servlet.http.HttpServlet" file="HttpServlet.java" line="637" method="service"/> <ns2:frame class="javax.servlet.http.HttpServlet" file="HttpServlet.java" line="717" method="service"/> <ns2:frame class="org.apache.catalina.core.ApplicationFilterChain" file="ApplicationFilterChain.java" line="290" method="internalDoFilter"/> <ns2:frame class="org.apache.catalina.core.ApplicationFilterChain" file="ApplicationFilterChain.java" line="206" method="doFilter"/> <ns2:frame class="org.alfresco.web.app.servlet.GlobalLocalizationFilter" file="GlobalLocalizationFilter.java" line="58" method="doFilter"/> <ns2:frame class="org.apache.catalina.core.ApplicationFilterChain" file="ApplicationFilterChain.java" line="235" method="internalDoFilter"/> <ns2:frame class="org.apache.catalina.core.ApplicationFilterChain" file="ApplicationFilterChain.java" line="206" method="doFilter"/> <ns2:frame class="org.apache.catalina.core.StandardWrapperValve" file="StandardWrapperValve.java" line="233" method="invoke"/> <ns2:frame class="org.apache.catalina.core.StandardContextValve" file="StandardContextValve.java" line="191" method="invoke"/> <ns2:frame class="org.apache.catalina.authenticator.AuthenticatorBase" file="AuthenticatorBase.java" line="470" method="invoke"/> <ns2:frame class="org.apache.catalina.core.StandardHostValve" file="StandardHostValve.java" line="127" method="invoke"/> <ns2:frame class="org.apache.catalina.valves.ErrorReportValve" file="ErrorReportValve.java" line="102" method="invoke"/> <ns2:frame class="org.apache.catalina.core.StandardEngineValve" file="StandardEngineValve.java" line="109" method="invoke"/> <ns2:frame class="org.apache.catalina.connector.CoyoteAdapter" file="CoyoteAdapter.java" line="298" method="service"/> <ns2:frame class="org.apache.coyote.ajp.AjpAprProcessor" file="AjpAprProcessor.java" line="427" method="process"/> <ns2:frame class="org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler" file="AjpAprProtocol.java" line="384" method="process"/> <ns2:frame class="org.apache.tomcat.util.net.AprEndpoint$Worker" file="AprEndpoint.java" line="1584" method="run"/> <ns2:frame class="java.lang.Thread" file="Thread.java" line="662" method="run"/> </ns2:stackTrace> <ns2:cause class="org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException" note="To disable this feature, set com.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace system property to false"> <message>Property cmis:objectTypeId must be set!</message> <ns2:stackTrace> <ns2:frame class="org.alfresco.opencmis.CMISConnector" file="CMISConnector.java" line="2524" method="getObjectTypeIdProperty"/> <ns2:frame class="org.alfresco.opencmis.AlfrescoCmisService" file="AlfrescoCmisService.java" line="1198" method="createDocument"/> <ns2:frame class="org.apache.chemistry.opencmis.server.support.CmisServiceWrapper" file="CmisServiceWrapper.java" line="666" method="createDocument"/> <ns2:frame class="org.apache.chemistry.opencmis.server.impl.webservices.ObjectService" file="ObjectService.java" line="79" method="createDocument"/> <ns2:frame class="sun.reflect.GeneratedMethodAccessor5324" line="unknown" method="invoke"/> <ns2:frame class="sun.reflect.DelegatingMethodAccessorImpl" file="DelegatingMethodAccessorImpl.java" line="25" method="invoke"/> <ns2:frame class="java.lang.reflect.Method" file="Method.java" line="597" method="invoke"/> <ns2:frame class="com.sun.xml.ws.api.server.InstanceResolver$1" file="InstanceResolver.java" line="246" method="invoke"/> <ns2:frame class="com.sun.xml.ws.server.InvokerTube$2" file="InvokerTube.java" line="146" method="invoke"/> <ns2:frame class="com.sun.xml.ws.server.sei.EndpointMethodHandler" file="EndpointMethodHandler.java" line="257" method="invoke"/> <ns2:frame class="com.sun.xml.ws.server.sei.SEIInvokerTube" file="SEIInvokerTube.java" line="93" method="processRequest"/> <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="598" method="__doRun"/> <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="557" method="_doRun"/> <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="542" method="doRun"/> <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="439" method="runSync"/> <ns2:frame class="com.sun.xml.ws.server.WSEndpointImpl$2" file="WSEndpointImpl.java" line="243" method="process"/> <ns2:frame class="com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit" file="HttpAdapter.java" line="471" method="handle"/> <ns2:frame class="com.sun.xml.ws.transport.http.HttpAdapter" file="HttpAdapter.java" line="244" method="handle"/> <ns2:frame class="com.sun.xml.ws.transport.http.servlet.ServletAdapter" file="ServletAdapter.java" line="135" method="handle"/> <ns2:frame class="com.sun.xml.ws.transport.http.servlet.WSServletDelegate" file="WSServletDelegate.java" line="129" method="doGet"/> <ns2:frame class="com.sun.xml.ws.transport.http.servlet.WSServletDelegate" file="WSServletDelegate.java" line="160" method="doPost"/> <ns2:frame class="com.sun.xml.ws.transport.http.servlet.WSServlet" file="WSServlet.java" line="75" method="doPost"/> <ns2:frame class="javax.servlet.http.HttpServlet" file="HttpServlet.java" line="637" method="service"/> <ns2:frame class="javax.servlet.http.HttpServlet" file="HttpServlet.java" line="717" method="service"/> <ns2:frame class="org.apache.catalina.core.ApplicationFilterChain" file="ApplicationFilterChain.java" line="290" method="internalDoFilter"/> <ns2:frame class="org.apache.catalina.core.ApplicationFilterChain" file="ApplicationFilterChain.java" line="206" method="doFilter"/> <ns2:frame class="org.alfresco.web.app.servlet.GlobalLocalizationFilter" file="GlobalLocalizationFilter.java" line="58" method="doFilter"/> <ns2:frame class="org.apache.catalina.core.ApplicationFilterChain" file="ApplicationFilterChain.java" line="235" method="internalDoFilter"/> <ns2:frame class="org.apache.catalina.core.ApplicationFilterChain" file="ApplicationFilterChain.java" line="206" method="doFilter"/> <ns2:frame class="org.apache.catalina.core.StandardWrapperValve" file="StandardWrapperValve.java" line="233" method="invoke"/> <ns2:frame class="org.apache.catalina.core.StandardContextValve" file="StandardContextValve.java" line="191" method="invoke"/> <ns2:frame class="org.apache.catalina.authenticator.AuthenticatorBase" file="AuthenticatorBase.java" line="470" method="invoke"/> <ns2:frame class="org.apache.catalina.core.StandardHostValve" file="StandardHostValve.java" line="127" method="invoke"/> <ns2:frame class="org.apache.catalina.valves.ErrorReportValve" file="ErrorReportValve.java" line="102" method="invoke"/> <ns2:frame class="org.apache.catalina.core.StandardEngineValve" file="StandardEngineValve.java" line="109" method="invoke"/> <ns2:frame class="org.apache.catalina.connector.CoyoteAdapter" file="CoyoteAdapter.java" line="298" method="service"/> <ns2:frame class="org.apache.coyote.ajp.AjpAprProcessor" file="AjpAprProcessor.java" line="427" method="process"/> <ns2:frame class="org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler" file="AjpAprProtocol.java" line="384" method="process"/> <ns2:frame class="org.apache.tomcat.util.net.AprEndpoint$Worker" file="AprEndpoint.java" line="1584" method="run"/> <ns2:frame class="java.lang.Thread" file="Thread.java" line="662" method="run"/> </ns2:stackTrace> </ns2:cause> </ns2:exception> </detail> </S:Fault> </S:Body></S:Envelope>
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-30-2012 05:58 PM
I think the problem is this little bit:
Jeff
<propertyString propertyDefinitionId="cmis:objectTypeId" xmlns="http://docs.oasis-open.org/ns/cmis/core/200908/"> <value>cmis:document</value></propertyString>
The objectTypeId is not a String, it is an ID. Therefore it needs to look like this:<propertyId propertyDefinitionId="cmis:objectTypeId" xmlns="http://docs.oasis-open.org/ns/cmis/core/200908/"> <value>cmis:document</value></propertyId>
Can you change the following:Dim propClass As New cmisPropertyString
To:Dim propClass As New cmisPropertyId
And see if that fixes things?Jeff

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-30-2012 08:19 PM
Yes, that fixed the problem. I am able to add documents to IBM P8 with the same code after the change, so it must not care if you specify the cmis
bjectTypeId as a String or Id.
Thanks for resolving this for me.

Thanks for resolving this for me.
