chemistry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Florian Müller <f...@apache.org>
Subject Re: Question about Adobe Drive Checkins new file mechanism
Date Tue, 29 Mar 2016 16:45:14 GMT
Hi,

There is no (pessimistic) locking in CMIS. So, it's difficult to
interpret this error message.

Here is a guess.
The property cmis:isVersionSeriesCheckedOut is false. From a client
perspective the document has not been checked out. That is, a check-in
doesn't make sense. Maybe Adobe Drive is complaining about that...


- Florian


Am 29.03.2016 um 17:46 schrieb Thanh Phan:
> Hi again,
> 
> I have to bother you guys again. I' now stuck against Adobe Drive 5. There
> are 2 ways to create new files in AD5 with the first being the one i
> mentioned earlier, the second is when we you one of their software suites
> (photoshop etc) and click on the save as or checkin button with the target
> being the AD5.
> 
> With what I could observe, AD5 first send a CREATE request to the children
> collection (empty file, versionstate: checkedout), and then proceed to GET
> the object. However, it now complains that: 2016/03/29 17:36:58,722
> [JobHandler-3] ERROR CheckIn - Caught exception
> 
> com.adobe.drive.data.model.DriveException: testu.ai is not locked!
> 	at com.adobe.drive.internal.biz.versioncue.service.call.CheckIn.checkConflict(CheckIn.java:134)
> 
> 
> Here is my Response to the request by path below. Can anyone confirm that
> it is possible that my atom entry is not correct, thus preventing the AD5
> to work properly? if I understandf correctly, locking in CMIS means that we
> provides a change token (and possibly not allowing to perform some
> update/delete operations, right?)
> 
> Thanks in advance.
> 
> 
> *<?xml version="1.0" encoding="utf-8" standalone="yes"?>*
> *<atom:entry xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/
> <http://docs.oasis-open.org/ns/cmis/core/200908/>"
> xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/
> <http://docs.oasis-open.org/ns/cmis/restatom/200908/>"
> xmlns:app="http://www.w3.org/2007/app <http://www.w3.org/2007/app>"
> xmlns:atom="http://www.w3.org/2005/Atom <http://www.w3.org/2005/Atom>">*
> *    <atom:author>*
> *        <atom:name>puppy</atom:name>*
> *    </atom:author>*
> *    <atom:id>http://localhost:58176/api/v1.0/entry?id=/docs/testu.ai
> <http://localhost:58176/api/v1.0/entry?id=/docs/testu.ai></atom:id>*
> *    <atom:published>2016-03-29T00:00:00+02:00</atom:published>*
> *    <atom:title>testu.ai <http://testu.ai></atom:title>*
> *    <atom:edited>2016-03-29T00:00:00+02:00</atom:edited>*
> *    <atom:updated>2016-03-29T00:00:00+02:00</atom:updated>*
> *    <atom:link href="http://localhost:58176/api/v1.0/
> <http://localhost:58176/api/v1.0/>" rel="service"
> type="application/atomsvc+xml" />*
> *    <atom:link
> href="http://localhost:58176/api/v1.0/entry?id=/docs/testu.ai
> <http://localhost:58176/api/v1.0/entry?id=/docs/testu.ai>" rel="self"
> type="application/atom+xml;type=entry" />*
> *    <atom:link
> href="http://localhost:58176/api/v1.0/entry?id=/docs/testu.ai
> <http://localhost:58176/api/v1.0/entry?id=/docs/testu.ai>" rel="enclosure"
> type="application/atom+xml;type=entry" />*
> *    <atom:link
> href="http://localhost:58176/api/v1.0/type?id=cmis%3Adocument
> <http://localhost:58176/api/v1.0/type?id=cmis%3Adocument>"
> rel="describedby" type="application/atom+xml;type=entry" />*
> *    <atom:link
> href="http://localhost:58176/api/v1.0/allowableactions?id=/docs/testu.ai
> <http://localhost:58176/api/v1.0/allowableactions?id=/docs/testu.ai>"
> rel="http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions
> <http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions>"
> type="application/cmis+xml;type=allowableActions" />*
> *    <atom:link
> href="http://localhost:58176/api/v1.0/parents?id=/docs/testu.ai
> <http://localhost:58176/api/v1.0/parents?id=/docs/testu.ai>" rel="up"
> type="application/atom+xml;type=feed" />*
> *    <atom:link
> href="http://localhost:58176/api/v1.0/entry?id=/docs/testu.ai
> <http://localhost:58176/api/v1.0/entry?id=/docs/testu.ai>" rel="edit"
> type="application/atom+xml;type=entry" />*
> *    <cmisra:object
> xmlns:ns3="http://docs.oasis-open.org/ns/cmis/messaging/200908/
> <http://docs.oasis-open.org/ns/cmis/messaging/200908/>">*
> *        <cmis:properties>*
> *            <cmis:propertyId propertyDefinitionId="cmis:baseTypeId"
> localName="BaseTypeId" displayName="Base Type Id"
> queryName="cmis:baseTypeId">*
> *                <cmis:value>cmis:document</cmis:value>*
> *            </cmis:propertyId>*
> *            <cmis:propertyId propertyDefinitionId="cmis:objectTypeId"
> localName="ObjectTypeId" displayName="Object Type Id"
> queryName="cmis:objectTypeId">*
> *                <cmis:value>cmis:document</cmis:value>*
> *            </cmis:propertyId>*
> *            <cmis:propertyString propertyDefinitionId="cmis:name"
> localName="Name" displayName="Name" queryName="cmis:name">*
> *                <cmis:value>testu.ai <http://testu.ai></cmis:value>*
> *            </cmis:propertyString>*
> *            <cmis:propertyId propertyDefinitionId="cmis:objectId"
> localName="ObjectId" displayName="Object Id" queryName="cmis:objectId">*
> *                <cmis:value>/docs/testu.ai <http://testu.ai></cmis:value>*
> *            </cmis:propertyId>*
> *            <cmis:propertyString propertyDefinitionId="cmis:createdBy"
> localName="CreatedBy" displayName="Created By" queryName="cmis:createdBy">*
> *                <cmis:value>puppy</cmis:value>*
> *            </cmis:propertyString>*
> *            <cmis:propertyDateTime
> propertyDefinitionId="cmis:creationDate" localName="CreationDate"
> displayName="Creation Date" queryName="cmis:creationDate">*
> *                <cmis:value>2016-03-29T00:00:00+02:00</cmis:value>*
> *            </cmis:propertyDateTime>*
> *            <cmis:propertyString
> propertyDefinitionId="cmis:lastModifiedBy" localName="LastModifiedBy"
> displayName="Last Modified By" queryName="cmis:lastModifiedBy">*
> *                <cmis:value>puppy</cmis:value>*
> *            </cmis:propertyString>*
> *            <cmis:propertyDateTime
> propertyDefinitionId="cmis:lastModificationDate"
> localName="LastModificationDate" displayName="Last Modification Date"
> queryName="cmis:lastModificationDate">*
> *                <cmis:value>2016-03-29T00:00:00+02:00</cmis:value>*
> *            </cmis:propertyDateTime>*
> *            <cmis:propertyString propertyDefinitionId="cmis:changeToken"
> localName="ChangeToken" displayName="Change Token"
> queryName="cmis:changeToken">*
> *                <cmis:value>8383</cmis:value>*
> *            </cmis:propertyString>*
> *            <cmis:propertyBoolean propertyDefinitionId="cmis:isImmutable"
> localName="cmis:isImmutable" displayName="cmis:isImmutable"
> queryName="cmis:isImmutable">*
> *                <cmis:value>true</cmis:value>*
> *            </cmis:propertyBoolean>*
> *            <cmis:propertyBoolean
> propertyDefinitionId="cmis:isMajorVersion" localName="IsMajorVersion"
> displayName="Is Major Version" queryName="cmis:isMajorVersion">*
> *                <cmis:value>true</cmis:value>*
> *            </cmis:propertyBoolean>*
> *            <cmis:propertyBoolean
> propertyDefinitionId="cmis:isPrivateWorkingCopy"
> localName="IsPrivateWorkingCopy" displayName="Is Private Working Copy"
> queryName="cmis:isPrivateWorkingCopy">*
> *                <cmis:value>false</cmis:value>*
> *            </cmis:propertyBoolean>*
> *            <cmis:propertyBoolean
> propertyDefinitionId="cmis:isLatestVersion" localName="IsLatestVersion"
> displayName="Is Latest Version" queryName="cmis:isLatestVersion">*
> *                <cmis:value>true</cmis:value>*
> *            </cmis:propertyBoolean>*
> *            <cmis:propertyBoolean
> propertyDefinitionId="cmis:isLatestMajorVersion"
> localName="IsLatestMajorVersion" displayName="Is Latest Major Version"
> queryName="cmis:isLatestMajorVersion">*
> *                <cmis:value>true</cmis:value>*
> *            </cmis:propertyBoolean>*
> *            <cmis:propertyString propertyDefinitionId="cmis:versionLabel"
> localName="VersionLabel" displayName="Version Label"
> queryName="cmis:versionLabel">*
> *                <cmis:value>1.0</cmis:value>*
> *            </cmis:propertyString>*
> *            <cmis:propertyId propertyDefinitionId="cmis:versionSeriesId"
> localName="VersionSeriesId" displayName="Version Series ID"
> queryName="cmis:versionSeriesId">*
> *                <cmis:value>testu.ai-1.0..ai</cmis:value>*
> *            </cmis:propertyId>*
> *            <cmis:propertyBoolean
> propertyDefinitionId="cmis:isVersionSeriesCheckedOut"
> localName="IsVersionSeriesCheckedOut" displayName="Is Version Series
> Checked Out" queryName="cmis:isVersionSeriesCheckedOut">*
> *                <cmis:value>false</cmis:value>*
> *            </cmis:propertyBoolean>*
> *            <cmis:propertyString
> propertyDefinitionId="cmis:versionSeriesCheckedOutBy"
> localName="VersionSeriesCheckedOutBy" displayName="Version Series Checked
> Out By" queryName="cmis:versionSeriesCheckedOutBy">*
> *                <cmis:value />*
> *            </cmis:propertyString>*
> *            <cmis:propertyId
> propertyDefinitionId="cmis:versionSeriesCheckedOutId"
> localName="VersionSeriesCheckedOutId" displayName="Version Series Checked
> Out ID" queryName="cmis:versionSeriesCheckedOutId">*
> *                <cmis:value />*
> *            </cmis:propertyId>*
> *            <cmis:propertyString
> propertyDefinitionId="cmis:checkinComment" localName="CheckinComment"
> displayName="Checking Comment" queryName="cmis:checkinComment">*
> *                <cmis:value />*
> *            </cmis:propertyString>*
> *            <cmis:propertyInteger
> propertyDefinitionId="cmis:contentStreamLength"
> localName="ContentStreamLength" displayName="Content Stream Length"
> queryName="cmis:contentStreamLength">*
> *                <cmis:value>0</cmis:value>*
> *            </cmis:propertyInteger>*
> *            <cmis:propertyString
> propertyDefinitionId="cmis:contentStreamMimeType"
> localName="ContentStreamMimeType" displayName="Content Stream MIME Type"
> queryName="cmis:contentStreamMimeType">*
> *                <cmis:value>application/postscript</cmis:value>*
> *            </cmis:propertyString>*
> *            <cmis:propertyString
> propertyDefinitionId="cmis:contentStreamFileName"
> localName="ContentStreamFileName" displayName="Content Stream File Name"
> queryName="cmis:contentStreamFileName">*
> *                <cmis:value>testu.ai <http://testu.ai></cmis:value>*
> *            </cmis:propertyString>*
> *            <cmis:propertyId propertyDefinitionId="cmis:contentStreamId"
> localName="ContentStreamId" displayName="Content Stream ID"
> queryName="cmis:contentStreamId">*
> *                <cmis:value>/docs/testu.ai <http://testu.ai></cmis:value>*
> *            </cmis:propertyId>*
> *            <cmis:propertyId propertyDefinitionId="cmis:parentId"
> localName="ParentId" displayName="Parent Id" queryName="cmis:parentId">*
> *                <cmis:value>/docs</cmis:value>*
> *            </cmis:propertyId>*
> *            <cmis:propertyString propertyDefinitionId="cmis:path"
> localName="Path" displayName="Path" queryName="cmis:path">*
> *                <cmis:value>/docs/testu.ai <http://testu.ai></cmis:value>*
> *            </cmis:propertyString>*
> *        </cmis:properties>*
> *        <cmis:allowableActions>*
> *            <cmis:canGetDescendants>false</cmis:canGetDescendants>*
> *            <cmis:canGetFolderTree>false</cmis:canGetFolderTree>*
> *            <cmis:canGetChildren>false</cmis:canGetChildren>*
> *            <cmis:canGetFolderParent>false</cmis:canGetFolderParent>*
> *            <cmis:canGetObjectParents>true</cmis:canGetObjectParents>*
> *            <cmis:canCreateDocument>false</cmis:canCreateDocument>*
> *            <cmis:canCreateFolder>false</cmis:canCreateFolder>*
> *            <cmis:canCreateRelationship>false</cmis:canCreateRelationship>*
> *            <cmis:canGetProperties>true</cmis:canGetProperties>*
> *            <cmis:canGetRenditions>false</cmis:canGetRenditions>*
> *            <cmis:canGetContentStream>true</cmis:canGetContentStream>*
> *            <cmis:canUpdateProperties>false</cmis:canUpdateProperties>*
> *            <cmis:canMoveObject>false</cmis:canMoveObject>*
> *            <cmis:canDeleteObject>false</cmis:canDeleteObject>*
> *            <cmis:canSetContentStream>false</cmis:canSetContentStream>*
> *
> <cmis:canDeleteContentStream>false</cmis:canDeleteContentStream>*
> *            <cmis:canDeleteTree>false</cmis:canDeleteTree>*
> *            <cmis:canAddObjectToFolder>true</cmis:canAddObjectToFolder>*
> *
> <cmis:canRemoveObjectFromFolder>false</cmis:canRemoveObjectFromFolder>*
> *            <cmis:canCheckOut>true</cmis:canCheckOut>*
> *            <cmis:canCancelCheckOut>false</cmis:canCancelCheckOut>*
> *            <cmis:canCheckIn>true</cmis:canCheckIn>*
> *            <cmis:canGetAllVersions>true</cmis:canGetAllVersions>*
> *
> <cmis:canGetObjectRelationships>false</cmis:canGetObjectRelationships>*
> *            <cmis:canApplyPolicy>false</cmis:canApplyPolicy>*
> *            <cmis:canRemovePolicy>false</cmis:canRemovePolicy>*
> *            <cmis:canGetAppliedPolicies>false</cmis:canGetAppliedPolicies>*
> *            <cmis:canGetACL>false</cmis:canGetACL>*
> *            <cmis:canApplyACL>false</cmis:canApplyACL>*
> *        </cmis:allowableActions>*
> *    </cmisra:object>*
> *    <cmisra:pathSegment>testu.ai <http://testu.ai></cmisra:pathSegment>*
> *    <atom:content
> src="http://localhost:58176/api/v1.0/content?id=/docs/testu.ai
> <http://localhost:58176/api/v1.0/content?id=/docs/testu.ai>"
> type="application/postscript" />*
> *    <atom:link
> href="http://localhost:58176/api/v1.0/content?id=/docs/testu.ai
> <http://localhost:58176/api/v1.0/content?id=/docs/testu.ai>"
> rel="edit-media" type="application/postscript" />*
> *</atom:entry>*
> 
> On Mon, Mar 28, 2016 at 10:50 PM, Thanh Phan <pdthanh06@gmail.com> wrote:
> 
>> Hi again,
>>
>> Thanks to your pointers, Florian, I figured it out how AD5 works (at least
>> for "checkin the new content").
>>
>> It's like you suspected, Adobe will first perform a Post to create a new
>> empty document like I mentioned earlier and then subsequently a PUT to
>> modify the content, using the "content-edit" URI. The content of the file
>> is the body of this PUT request.
>>
>> Earlier I was not able to catch the PUT request there's some issue with
>> Adobe Drive 5 cache.
>>
>> Hope some souls out there who gotta deal with AD5 can find this
>> information useful.
>>
>>
>>
>> On Mon, Mar 28, 2016 at 8:40 PM, Thanh Phan <pdthanh06@gmail.com> wrote:
>>
>>> Youre absolutely right about it's not a checkin request. The first time a
>>> document is added for versioning in Adobe Drive they perform a "Check In",
>>> which I believe, is similar to a Document Creation request.
>>>
>>> I think they expect some thing in order to proceed but I have no clue
>>> what it is.
>>>
>>> Since the operation fails, there are no subsequent PUT requests.
>>>
>>> On Sun, Mar 27, 2016 at 7:34 PM, Florian Müller <fmui@apache.org> wrote:
>>>
>>>> Hi,
>>>>
>>>> This is not a checkin request. This is an invalid create document
>>>> request. (The property cmis:name is missing).
>>>> Could you please check if there is a PUT request against the PWC
>>>> resource? That would be the checkin call.
>>>>
>>>> - Florian
>>>>
>>>>
>>>>> Hello Florian, I'm extremely appreciate that you take time to reply.
>>>>>
>>>>> I just tested again the InMemory Latest Build. What I tried is to
>>>>> checkin a new file called "test.txt".
>>>>>
>>>>> I also tried to capture the POST request using rawcap, basically they
>>>>> send out an /POST
>>>>> /inmemory/atom/A1/children?id=125&versioningState=checkedout /
>>>>> /
>>>>> /
>>>>> with the body being
>>>>>
>>>>> / <?xml version="1.0" encoding="utf-8"?>
>>>>> /
>>>>> /<entry xmlns="http://www.w3.org/2005/Atom"/
>>>>> /xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/"/
>>>>> /xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/">/
>>>>> / <title>test.txt</title>/
>>>>> / <cmisra:object>/
>>>>> /<cmis:properties>/
>>>>> /<cmis:propertyId propertyDefinitionId="cmis:objectTypeId">/
>>>>> /<cmis:value>cmis:document</cmis:value>/
>>>>> /</cmis:propertyId>/
>>>>> /</cmis:properties>/
>>>>> / </cmisra:object>/
>>>>> /</entry>/
>>>>>
>>>>> Again we got an error with the relevant Log in Adobe Drive 5:
>>>>>
>>>>> com.adobe.drive.data.model.DriveException: Error checking in: Conflict
>>>>>       at
>>>> com.adobe.drive.internal.data.manager.DataManager.executeCheckIn(DataManager.java:5680)
>>>>>       at
>>>> com.adobe.drive.internal.data.manager.DataManager.checkIn(DataManager.java:5305)
>>>>>       at
>>>> com.adobe.drive.internal.data.manager.DataManager.checkLocalAssetPostClose(DataManager.java:10324)
>>>>>       at
>>>> com.adobe.drive.internal.data.manager.DataManager.close(DataManager.java:3423)
>>>>>       at
>>>> com.adobe.drive.internal.biz.filesystem.FileSystemService$10.execute(FileSystemService.java:839)
>>>>>       at
>>>> com.adobe.drive.internal.biz.filesystem.FileSystemService$10.execute(FileSystemService.java:1)
>>>>>       at
>>>> com.adobe.drive.internal.biz.filesystem.FileSystemService$FSCallable.run(FileSystemService.java:1793)
>>>>>       at
>>>> com.adobe.drive.data.internal.persistence.PersistenceRunner$2.runWithTransaction(PersistenceRunner.java:186)
>>>>>       at
>>>> com.adobe.drive.data.internal.persistence.PersistenceModificationCallable.run(PersistenceModificationCallable.java:71)
>>>>>       at
>>>> com.adobe.drive.data.internal.persistence.PersistenceRunner.run(PersistenceRunner.java:119)
>>>>>       at
>>>> com.adobe.drive.data.internal.persistence.PersistenceRunner.runWithTransaction(PersistenceRunner.java:181)
>>>>>       at
>>>> com.adobe.drive.internal.biz.filesystem.FileSystemService.runWithTransaction(FileSystemService.java:1748)
>>>>>       at
>>>> com.adobe.drive.internal.biz.filesystem.FileSystemService.runWithTransaction(FileSystemService.java:1727)
>>>>>       at
>>>> com.adobe.drive.internal.biz.filesystem.FileSystemService.close(FileSystemService.java:821)
>>>>>       at
>>>> com.adobe.drive.ifs.job.CloseHandler$1.call(CloseHandler.java:67)
>>>>>       at
>>>> com.adobe.drive.ifs.job.CloseHandler$1.call(CloseHandler.java:1)
>>>>>       at com.adobe.drive.model.context.Context.run(Context.java:88)
>>>>>       at
>>>> com.adobe.drive.ifs.internal.IFSConnection.dispatch(IFSConnection.java:187)
>>>>>       at
>>>> com.adobe.drive.ifs.internal.IFSConnection.run(IFSConnection.java:142)
>>>>>
>>>>> It;'s frustrating with AD5 really since I have no Idea what they are
>>>>> expecting after that call.
>>>>>
>>>>> On Sun, Mar 27, 2016 at 4:54 PM, Florian Müller <fmui@apache.org
>>>>> <mailto:fmui@apache.org>> wrote:
>>>>>
>>>>>     Hi,
>>>>>
>>>>>     Do you think you can capture this POST request?
>>>>>     I don't think this is an OpenCMIS server framework problem, but we
>>>>>     should check. At least the InMemory server should be more robust.
>>>>>
>>>>>     - Florian
>>>>>
>>>>>
>>>>>     > Hello everyone,
>>>>>     >
>>>>>     > I know it's not a Adobe Drive 5 (AD5) place but i'm pretty
>>>>>     desperate now
>>>>>     > trying to uderstand the underlying actions. I would be very
>>>>>     grateful if
>>>>>     > someone knows how the checkin new files works for AD5 (latest
>>>>>     build)?
>>>>>     >
>>>>>     > It does not seem to work with the latest build from Alfresco
and
>>>> the
>>>>>     > InMemory OpenCMIS server. The one from InMemory got an
>>>>>     NullPointerReference
>>>>>     > error while Alfresco produces an empty file and an other emoty
>>>>>     PWC, and AD5
>>>>>     > has an Not Allowed Action Error.
>>>>>     >
>>>>>     > I seems to me that it sends a POST request to the parent
>>>>>     folder's children
>>>>>     > service with  a checked out requests but without any content.
>>>>>     Why is that?
>>>>>     > It seems also expect a Private Working Copy
>>>>>     >
>>>>>     > Thanks very much in advance.
>>>>>     >
>>>>>
>>>>>
>>>>
>>>>
>>>
>>
> 

Mime
View raw message