You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jackrabbit.apache.org by "Kalka, Edyta" <Ed...@pl.compuware.com> on 2006/12/11 11:47:00 UTC

wrapping jcr request inside webdav request

Hello,

 

I am working for Eclipse Corona project.

We decided to use jackrabbit repository that would be accessed with the
use of webdav interface.

We are able to browse jackrabbit repository content with the use of
webdav clients (tested: eclipse site explorer, or dav explorer) but we
are not able to add/update any new resources - response containes 409
http error after such attempts (response message: "no definition found
in parent node's node type for new node: no matching child node
definition found for...").

 

I suppose the problem is related with not valid wrapping jcr request
inside webdav request (e.g. eclipse site explorer, when new resource is
being added, calls mkcol method sending only new resource name).

 

Therefore I would have the following questions:

 

* How should I build webdav request that would be correctly converted to
jcr request on the server side?

* How to define that new resource being created is a resource of given
custom (mixin) type?

* How to pass/set jcr properties withing webdav request?

 

For any help thanks in advance.

 

Best regards

Edyta Kalka

The contents of this e-mail are intended for the named addressee only. It contains information that may be confidential. Unless you are the named addressee or an authorized designee, you may not copy or use it, or disclose it to anyone else. If you received it in error please notify us immediately and then destroy it. 

Re: wrapping jcr request inside webdav request

Posted by Angela Schreiber <an...@day.com>.
hi

Kalka, Edyta wrote:
> We are able to browse jackrabbit repository content with the use of
> webdav clients (tested: eclipse site explorer, or dav explorer) but we
> are not able to add/update any new resources - response containes 409
> http error after such attempts (response message: "no definition found
> in parent node's node type for new node: no matching child node
> definition found for...").

this is the exception thrown by jackrabbit if upon Node.addNode
not matching child node definition was found.
in this case you have to make sure, that your webdav call
specifies the nodetype to be used for the new node (see below).

> Therefore I would have the following questions:


> * How should I build webdav request that would be correctly converted to
> jcr request on the server side?

- MKCOL with request body, that will be used to run a importXML
   -> thus it need to be in the xml format defined for the import.
   -> in case of a single addNode, this is simple, see example below [1]
- MKCOL without request body will be translated to n.addNode(String)
- Node.addNode(String, String) has no special translation.

in contrast:
- PUT will always be mapped to Node.setProperty

> * How to define that new resource being created is a resource of given
> custom (mixin) type?

- custom primary type is assigned as described above.
   as specified by jsr170 the primary type cannot be changed later on.

- mixin types:
   mixin types can be added and removed using PROPPATCH on
   the collection representing the target Node.


> * How to pass/set jcr properties withing webdav request?

- Node.setProperty is mapped by a PUT request
- Modifying the value of an existing property can be achieved
   by PROPPATCH on the non-collection resource representing the
   target Property.
   Note, that different custom webdav properties are defined for
   multivalued and single value properties.

further notes:

- we defined, that by default all calls to the jcr-server are
   translated into 'workspace' calls unless the client explicitely
   indicates, that it wants to sent a bundle of transient
   modifications. this is achieved by starting the modifications
   by a LOCK with a custom defined lock-type (-> see
   o.a.j.transaction.TransactionConstants#LOCAL and the
   corresponding entry in the TODO.txt, since the naming is not
   correct). Unpon UNLOCK, the session will be released on
   the server again.

- the reason for this is, that the aim is to keep transient
   modifications on the client and sending calls to the server
   only upon save.

- NOTE: i recently realized, that the server does not
   consistently assert, that this precondition is met. that
   needs to be fixed.

regards
angela


[1] example MKCOL for Node.addNode(String, String) including
     surrounding LOCK/UNLOCK, that indicate the boundaries between
     2 save calls.


---< request lock >-------------------------------------------------

LOCK /jackrabbit/server/default/jcr%3aroot HTTP/1.1
[ headers ]
<?xml version="1.0" encoding="UTF-8"?>
<D:lockinfo xmlns:D="DAV:"><D:lockscope><dcr:local 
xmlns:dcr="http://www.day.com/jcr/webdav/1.0"/></D:lockscope><D:locktype><dcr:transaction 
xmlns:dcr="http://www.day.com/jcr/webdav/1.0"/></D:locktype></D:lockinfo>

---< response >-----------------------------------------------------

HTTP/1.0 200 OK
[ headers ]
Lock-Token: <opaquelocktoken:af768848-3eb0-4172-93d7-45c0282c4c45>

[ response body ]

---< request mkcol >------------------------------------------------

MKCOL /jackrabbit/server/default/jcr%3aroot/testroot/node1 HTTP/1.1
TransactionId: <opaquelocktoken:af768848-3eb0-4172-93d7-45c0282c4c45>
[ headers ]

<?xml version="1.0" encoding="UTF-8"?>
<sv:node xmlns:sv="http://www.jcp.org/jcr/sv/1.0" 
sv:name="node1"><sv:property sv:name="jcr:primaryType" 
sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property></sv:node>

---< response mkcol >------------------------------------------------

HTTP/1.0 201 Created
[ headers ]

---------------------------------------------------------------------

[ possibly other transient modifications that belong to the same
   'save' call ]

---< request unlock >------------------------------------------------

UNLOCK /jackrabbit/server/default/jcr%3aroot HTTP/1.1
Lock-Token: <opaquelocktoken:af768848-3eb0-4172-93d7-45c0282c4c45>
[ headers ]

<?xml version="1.0" encoding="UTF-8"?><dcr:transactioninfo 
xmlns:dcr="http://www.day.com/jcr/webdav/1.0"><dcr:transactionstatus><dcr:commit/></dcr:transactionstatus></dcr:transactioninfo>

---< response unlock >-----------------------------------------------

HTTP/1.0 204 No Content
[ headers ]