jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Roland Porath" <rol...@exari.com>
Subject RE: properties in collections
Date Thu, 07 Feb 2008 00:23:29 GMT
Hi Angela

I apologise for being unclear in my original post.

I did start from the webdav layer. Only when the behavior of that did not
make sense to me I started to dig into the code of the server.
I do appreciate that the server is at a much lower level than webdav but
currently I believe this is where the problem originates.

Just a brief recapitulation of the webdav behavior:

All test were run with an unmodified config.xml

Case 1 unpatched builtin-nodetypes.xml
1.1. non collection
	- proppatch returns a 207 containing a 200
	- propget returns the newly created property and it's value
1.2 collection
	- proppatch returns a 207 containing a 409
Both 1.1 and 1.2 are exactly what you would expect. 
Case 2 patched builtin-nodetypes; 
2.1 non collection: 
	- same behavior as 1.1
2.1 collection:
	- proppatch return 207 containing a 200
	- propget does not return the newly created property but
lastModified has been updated.


That's where I was at when I decided I had to dig into the code and found
that collections don't get dirty when a property is added.
I guess what I'm trying to find out is if this is a feature or a bug.
I need to fix this because we make heavy use of collections on properties.
>From your response I get the impression that you suspect it to be a bug and
unless some new evidence comes in, I'll second that.
Should it be bugged in JIRA? I'm happy to pick it up because I need to fix
it asap anyway.
The problem seems to live in the area of ItemImpl.save() and the whole
persistence mechanism around it. 

Cheers 

Roland

APPENDIX for the terminally geeky: protocol of my tests

****************************************************************************
********
UNPATCHED BUILTIN-NODETYPES
****************************************************************************
********
    <nodeType name="nt:hierarchyNode" isMixin="false"
hasOrderableChildNodes="false" primaryItemName="">
        <supertypes>
           <supertype>nt:base</supertype>
        </supertypes>
        <propertyDefinition name="jcr:created" requiredType="Date"
autoCreated="true" mandatory="false" onParentVersion="INITIALIZE"
protected="true" multiple="false"/>
    </nodeType>

*************************NON
COLLECTION********************************************
cadaver: propset t1 testProp testvalue

PROPPATCH /jackrabbit-webapp-1.4/repository/default/test/t1 HTTP/1.1
Host: 127.0.0.1:5000
User-Agent: cadaver/0.22.2 neon/0.24.6
Connection: TE
TE: trailers
Content-Length: 208
Content-Type: application/xml
Authorization: Basic QWRtaW5pc3RyYXRvcjpmcmVlLmRvbQ==

<?xml version="1.0" encoding="utf-8" ?>
   <D:propertyupdate xmlns:D="DAV:">
      <D:set>
         <D:prop>
            <testProp
xmlns="http://webdav.org/cadaver/custom-properties/">value</testProp>
         </D:prop>
      </D:set>
   </D:propertyupdate>
   
   
HTTP/1.1 207 Multi-Status
Content-Type: text/xml;charset=UTF-8
Content-Length: 339
Date: Wed, 06 Feb 2008 22:57:13 GMT
Server: Apache-Coyote/1.1

<?xml version="1.0" encoding="UTF-8"?>
   <D:multistatus xmlns:D="DAV:">
      <D:response>
 
<D:href>http://127.0.0.1:5000/jackrabbit-webapp-1.4/repository/default/test/
t1</D:href>
         <D:propstat>
            <D:prop>
               <testProp
xmlns="http://webdav.org/cadaver/custom-properties/"/>
            </D:prop>
            <D:status>HTTP/1.1 200 OK</D:status>
         </D:propstat>
      </D:response>
   </D:multistatus>   
   
*************************COLLECTION*****************************************
***   
cadaver: propset c1 testProp testvalue

PROPPATCH /jackrabbit-webapp-1.4/repository/default/test/c1 HTTP/1.1
Host: 127.0.0.1:5000
User-Agent: cadaver/0.22.2 neon/0.24.6
Connection: TE
TE: trailers
Content-Length: 208
Content-Type: application/xml
Authorization: Basic QWRtaW5pc3RyYXRvcjpmcmVlLmRvbQ==

<?xml version="1.0" encoding="utf-8" ?>
	<D:propertyupdate xmlns:D="DAV:">
		 <D:set>
				<D:prop>
					 <testprop
xmlns="http://webdav.org/cadaver/custom-properties/">value</testprop>
				</D:prop>
		 </D:set>
</D:propertyupdate>

HTTP/1.1 207 Multi-Status
Content-Type: text/xml;charset=UTF-8
Content-Length: 346
Date: Wed, 06 Feb 2008 23:01:21 GMT
Server: Apache-Coyote/1.1

<?xml version="1.0" encoding="UTF-8"?>
   <D:multistatus xmlns:D="DAV:">
      <D:response>
 
<D:href>http://127.0.0.1:5000/jackrabbit-webapp-1.4/repository/default/test/
c1/</D:href>
         <D:propstat>
            <D:prop>
               <testprop
xmlns="http://webdav.org/cadaver/custom-properties/"/>
            </D:prop>
            <D:status>HTTP/1.1 409 Conflict</D:status>
         </D:propstat>
      </D:response>
   </D:multistatus>
   
   
   
   
   
   
   
****************************************************************************
********
PATCHED BUILTIN-NODETYPES
****************************************************************************
********
    <nodeType name="nt:hierarchyNode" isMixin="false"
hasOrderableChildNodes="false" primaryItemName="">
        <supertypes>
           <supertype>nt:base</supertype>
        </supertypes>
        <propertyDefinition name="jcr:created" requiredType="Date"
autoCreated="true" mandatory="false" onParentVersion="INITIALIZE"
protected="true" multiple="false"/>
        <propertyDefinition name="*" requiredType="undefined"
autoCreated="false" mandatory="false" onParentVersion="COPY"
protected="false" multiple="true"/>
        <propertyDefinition name="*" requiredType="undefined"
autoCreated="false" mandatory="false" onParentVersion="COPY"
protected="false" multiple="false"/>
    </nodeType>
//tried the same patch in nt:folder; less evil hack i reckon, unfortunately
same behavior.
*************************NON
COLLECTION********************************************
   

PROPPATCH /jackrabbit-webapp-1.4/repository/default/test/t1 HTTP/1.1
Host: 127.0.0.1:5000
User-Agent: cadaver/0.22.2 neon/0.24.6
Connection: TE
TE: trailers
Content-Length: 208
Content-Type: application/xml
Authorization: Basic QWRtaW5pc3RyYXRvcjpmcmVlLmRvbQ==

<?xml version="1.0" encoding="utf-8" ?>
   <D:propertyupdate xmlns:D="DAV:">
      <D:set>
         <D:prop>
            <testProp
xmlns="http://webdav.org/cadaver/custom-properties/">value</testProp>
         </D:prop>
      </D:set>
   </D:propertyupdate>
   
HTTP/1.1 207 Multi-Status
Content-Type: text/xml;charset=UTF-8
Content-Length: 339
Date: Wed, 06 Feb 2008 23:31:28 GMT
Server: Apache-Coyote/1.1

<?xml version="1.0" encoding="UTF-8"?>
   <D:multistatus xmlns:D="DAV:">
      <D:response>
 
<D:href>http://127.0.0.1:5000/jackrabbit-webapp-1.4/repository/default/test/
t1</D:href>
         <D:propstat>
            <D:prop>
               <testProp
xmlns="http://webdav.org/cadaver/custom-properties/"/>
            </D:prop>
            <D:status>HTTP/1.1 200 OK</D:status>
         </D:propstat>
      </D:response>
   </D:multistatus   
   
   
*************************COLLECTION*****************************************
***
   
   
PROPPATCH /jackrabbit-webapp-1.4/repository/default/test/c1 HTTP/1.1
Host: 127.0.0.1:5000
User-Agent: cadaver/0.22.2 neon/0.24.6
Connection: TE
TE: trailers
Content-Length: 208
Content-Type: application/xml
Authorization: Basic QWRtaW5pc3RyYXRvcjpmcmVlLmRvbQ==

<?xml version="1.0" encoding="utf-8" ?>
   <D:propertyupdate xmlns:D="DAV:">
      <D:set>
         <D:prop>
            <testProp
xmlns="http://webdav.org/cadaver/custom-properties/">value</testProp>
         </D:prop>
      </D:set>
   </D:propertyupdate>
   
   
HTTP/1.1 207 Multi-Status
Content-Type: text/xml;charset=UTF-8
Content-Length: 340
Date: Wed, 06 Feb 2008 23:28:08 GMT
Server: Apache-Coyote/1.1

<?xml version="1.0" encoding="UTF-8"?>
   <D:multistatus xmlns:D="DAV:">
      <D:response>
 
<D:href>http://127.0.0.1:5000/jackrabbit-webapp-1.4/repository/default/test/
c1/</D:href>
         <D:propstat>
            <D:prop>
               <testProp
xmlns="http://webdav.org/cadaver/custom-properties/"/>
            </D:prop>
            <D:status>HTTP/1.1 200 OK</D:status>
         </D:propstat>
      </D:response>
   </D:multistatus>
   
   
   
   


Mime
View raw message