[ https://issues.apache.org/jira/browse/CMIS-1117?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andrea Ligios updated CMIS-1117: -------------------------------- Attachment: image-2021-05-18-12-19-22-907.png > Using AtomPub binding I can create Folders calling createDocument > ----------------------------------------------------------------- > > Key: CMIS-1117 > URL: https://issues.apache.org/jira/browse/CMIS-1117 > Project: Chemistry > Issue Type: Bug > Components: opencmis-server > Affects Versions: OpenCMIS 1.1.0 > Reporter: Andrea Ligios > Priority: Minor > Attachments: image-2021-05-18-00-03-11-323.png, > image-2021-05-18-00-06-14-967.png, image-2021-05-18-00-20-40-800.png, > image-2021-05-18-12-19-22-907.png > > > I've met CMIS a couple of days ago, please forgive me in case the question is > naive. > I have a test case that is trying to create a document by passing the > _*"cmis:folder"*_ ObjectTypeId (instead of _*"cmis:document"*_), and expects > the test to fail. > * With *Browser binding*, {color:#00875a}it fails with a > CmisConstraintException{color} > * With *WebService binding*, {color:#00875a}it fails with a > CmisConstraintException{color} > * With *AtomPub binding*,{color:#de350b} it creates a Folder, and then fails > later with a CmisRuntimeException{color} > While debugging the code, I've seen that *Browser binding* (along with > *WebService binding*) has a *_createDocument()_* method in its [ObjectService > implementation|https://github.com/apache/chemistry-opencmis/blob/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ObjectService.java#L88-L137]: > !image-2021-05-18-00-03-11-323.png|width=984,height=914! > The *AtomPub Binding*, instead, has a _*create()*_ method in itsĀ > [ObjectService > implementation|https://github.com/apache/chemistry-opencmis/blob/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ObjectService.java#L79-L158]: > !image-2021-05-18-00-06-14-967.png|width=984,height=1609! > While the _*createDocument()*_ method allows us to check if the ObjectTypeId > passed is the proper one (*_"cmis:document"_*), and to raise an error if an > unexpected ObjectTypeId is passed, the _*create()*_ method is agnostic about > the object to create, and forces us to perform a Switch on the ObjectTypeId > to detect the proper action to call. > Hence, calling _*createDocument()*_ with *AtomPub binding* and > _*"cmis:folder"*_ ObjectTypeId will result in calling the _*create()*_ > method, and then in the switch reading _*"cmis:folder"*_ and calling the > underlying _*createFolder()*_ method, instead of the underlying > _*createDocument()*_ one. > The folder will be created, then somewhere up in the chain[*] the error will > be detected and will trigger a *CmisRuntimeException*, but that implies that, > * for the same call, two different exceptions could be returned depending on > the binding used > * for the same call, the AtomPub binding will create an unwanted object > before returning an error > Could you please confirm me this is intended, and maybe shed some light on > why the *AtomPub binding* is working with a different set of creational > methods than the other bindings? > Should we simply add a check in front of the calls to cover cases like this? > [*] It's the [FolderImpl > class|https://github.com/apache/chemistry-opencmis/blob/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/FolderImpl.java#L83-L103] > that checks that the object created is of the expected type, and this seems > an attempt to cope with the problem... but one that leaves debris behind, > though (the folder created): > !image-2021-05-18-00-20-40-800.png|width=985,height=472! > Thank you in advance -- This message was sent by Atlassian Jira (v8.3.4#803005)