Hi,

currently I am working on the integration of WebDAV binding extensions into |org.apache.jackrabbit.webdav.simple.SimpleWebdavServlet|, using the shareable node feature of jsr-283. The implementation of the BIND method was straightforward and worked as expected, but I noticed that sometimes DELETE removed the wrong binding. It turned out that |org.apache.jackrabbit.core.NodeImpl.removeShare()| did not remove the node itself, but instead another node from the same shared set. Apparently the methods |ItemImpl.getPath()| and |ItemImpl.getPrimaryPath()| have unexpected results in these cases. The following testcase illustrates the issue if included into the test class |org.apache.jackrabbit.core.ShareableNodeTest|:

/**
* Verify that shared nodes return correct paths.
*/
public void testPath() throws Exception {
   Node a1 = testRootNode.addNode("a1");
   Node a2 = a1.addNode("a2");
   Node b1 = a1.addNode("b1");
   b1.addMixin("mix:shareable");
   testRootNode.save();

   //now we have a shareable node N with path a1/b1

   Session session = testRootNode.getSession();
   Workspace workspace = session.getWorkspace();
   String path = a2.getPath() + "/b2";
   workspace.clone(workspace.getName(), b1.getPath(), path, false);

//now we have another shareable node N' in the same shared set as N with path a1/a2/b2

   //using the path a1/a2/b2, we should get the node N' here
   Item item = session.getItem(path);
   String p = item.getPath();
assertFalse("unexpectedly got the path from another node from the same shared set ", p.equals(b1.getPath()));
}

Regards,
Manfred

--
Manfred Baedke

<green/>bytes GmbH
Hafenweg 16
D-48155 Münster
Germany
Amtsgericht Münster: HRB5782
--
Manfred Baedke

<green/>bytes GmbH
Hafenweg 16
D-48155 Münster
Germany
Amtsgericht Münster: HRB5782

Reply via email to