You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@chemistry.apache.org by "Florian Müller (JIRA)" <ji...@apache.org> on 2013/06/20 16:08:27 UTC

[jira] [Resolved] (CMIS-573) CmisExtensionElement update fails

     [ https://issues.apache.org/jira/browse/CMIS-573?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Florian Müller resolved CMIS-573.
---------------------------------

    Resolution: Not A Problem
    
> CmisExtensionElement update fails
> ---------------------------------
>
>                 Key: CMIS-573
>                 URL: https://issues.apache.org/jira/browse/CMIS-573
>             Project: Chemistry
>          Issue Type: Bug
>    Affects Versions: OpenCMIS 0.6.0
>         Environment: OSX 10.8.2
>            Reporter: linzhixing
>
> I'm now developing a document management system implementing CMIS specification, using Apache Chemistry OpenCMIS 0.6.0.
> My CMIS repository is for the present almost already working, but CmisExtensionElement update function fails.
> I would to know if it is really an error, or there is a better and correct way to update CmisExtensionElement.
> of course I read the following article "Adding CMIS extensions (Server)",
> http://chemistry.apache.org/java/how-to/how-to-add-extension.html
> but it describes ObjectDataImpl, not CmisObject or Document object's update itself.
> Here is my code.
> --------------------------------------------------------------------------------------
> //Get the document to be updated
> Document doc = (Document) facade.getSession().getObject(getModel().getId());
> //Prepare update properties except CmisExtensionElement
> Map<String, Object> props = new HashMap<String, Object>();
> props.put(PropertyIds.NAME, getModel().getName());
> if (getModel().getUpload() != null) setAttachment(doc);
> 			
> //Prepare CmisExtensionElement
> Session session = facade.getSession();
> String repositoryId = session.getRepositoryInfo().getId();
> Holder<String> objectHolder = new Holder<String>(getModel().getId());
> Set<Updatability> updatebility = new HashSet<Updatability>();
> updatebility.add(Updatability.READWRITE);
> Properties properties = session.getObjectFactory().convertProperties(props, doc.getType(), updatebility);
> properties.setExtensions(convertCmisExtensionElement(doc.getExtensions(ExtensionLevel.OBJECT)));
> //Update the document with the properties including CmisExtensionElement
> facade.getSession().getBinding().getObjectService().updateProperties(
> 					repositoryId, objectHolder, null, properties, null);
> --------------------------------------------------------------------------------------
> "updateProperties" method in the code fails, though when CmisExtensionElement is not set successfully.
> The error is as follows:
> --------------------------------------------------------------------------------------
> org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException: Exception: NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.
> 	at org.apache.chemistry.opencmis.commons.impl.Converter.convertExtension(Converter.java:2587)
> 	at org.apache.chemistry.opencmis.commons.impl.Converter.convert(Converter.java:1450)
> 	at org.apache.chemistry.opencmis.client.bindings.spi.atompub.ObjectServiceImpl.updateProperties(ObjectServiceImpl.java:273)
> 	at jp.aegif.struts2cmisexplorer.struts2actions.UpdateDocumentAction.executeUpdate(UpdateDocumentAction.java:243)
> 	at jp.aegif.struts2cmisexplorer.struts2actions.UpdateDocumentAction.execute(UpdateDocumentAction.java:82)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
> 	at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
> 	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
> 	at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
> 	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
> 	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
> 	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:306)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
> 	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
> 	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
> 	at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
> 	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
> 	at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
> 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
> 	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)
> 	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
> 	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
> 	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
> 	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
> 	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
> 	at org.mortbay.jetty.Server.handle(Server.java:326)
> 	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
> 	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)
> 	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
> 	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
> 	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
> 	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
> 	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
> Caused by: org.w3c.dom.DOMException: NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.
> 	at com.sun.org.apache.xerces.internal.dom.AttrNSImpl.setName(AttrNSImpl.java:105)
> 	at com.sun.org.apache.xerces.internal.dom.AttrNSImpl.<init>(AttrNSImpl.java:74)
> 	at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.createAttributeNS(CoreDocumentImpl.java:2138)
> 	at com.sun.org.apache.xerces.internal.dom.ElementImpl.setAttributeNS(ElementImpl.java:656)
> 	at org.apache.chemistry.opencmis.commons.impl.Converter.convertCmisExtensionElementToNode(Converter.java:2697)
> 	at org.apache.chemistry.opencmis.commons.impl.Converter.convertExtension(Converter.java:2582)
> 	... 71 more
> --------------------------------------------------------------------------------------
> As far as I investigated, namespace key-values are automatically included into the CmisExtentionElement's attributes, like:
> --------------------------------------------------------------------------------------
> [{http://hoge.jp/MyCmis/}aspects {ns3=http://docs.oasis-open.org/ns/cmis/messaging/200908/, aspects=http://hoge.jp/MyCmis/, xmlns=http://hoge.jp/MyCmis/}: [{http://hoge.jp/MyCmis/}customProperty1 {title=customevalue1, ns0=http://hoge.jp/MyCmis/}: ], {http://hoge.jp/MyCmis/}pastVersions {v1=doc_5_attach_1, ns2=http://hoge.jp/MyCmis/, v0=doc_5_attach_0, ns1=http://hoge.jp/MyCmis/, ns3=http://docs.oasis-open.org/ns/cmis/messaging/200908/, ns0=http://hoge.jp/MyCmis/, v2=doc_5_attach_2, pastVersions=http://hoge.jp/MyCmis/, xmlns=http://hoge.jp/MyCmis/}: dummy]
> --------------------------------------------------------------------------------------
> "ns0","ns1","ns2", "ns3", and "xlmns" are the namespaces. 
> My CMIS repository doesn't output any namespaces and they are already included when I got "doc.getExtensions(ExtensionLevel.OBJECT)" from my CMIS repository.
> I debugged NAMESPACE error and the "xmlns" article is critical.
> Removing "xmlns" key-value from the attribute can avoid the namespace error, but then I got the error:
> --------------------------------------------------------------------------------------
> org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException: Object Info is missing!
> 	at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService.convertStatusCode(AbstractAtomPubService.java:452)
> 	at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService.put(AbstractAtomPubService.java:595)
> 	at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService.put(AbstractAtomPubService.java:581)
> 	at org.apache.chemistry.opencmis.client.bindings.spi.atompub.ObjectServiceImpl.updateProperties(ObjectServiceImpl.java:278)
> --------------------------------------------------------------------------------------
> So, what can I do to update CmisExtensionElement?
> Thanks in advance.
> Best regards,

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira