2013-06-20 45 views
2

我想重命名Jackrabbit中的節點,但它失敗,如下所示。給定節點「/ fooNode」,我希望它被重命名爲「/ fooNodeRenamed」。無法使用Jackrabbit和WebDAV移動(重命名)節點

我的客戶端是一個簡單的Java程序,基於JavaDavexClient在Debian Wheezy上使用Apache Jackrabbit 2.6.2和Oracle Java 1.7.0_25。

下面是代碼:

import javax.jcr.Credentials; 
import javax.jcr.Node; 
import javax.jcr.Repository; 
import javax.jcr.RepositoryException; 
import javax.jcr.Session; 
import javax.jcr.Workspace; 
import javax.jcr.SimpleCredentials; 
import javax.jcr.version.*; 
import ch.liip.jcr.davex.DavexClient; 

public class Client 
{ 
    public static void main(String[] args) 
    { 
     try { 
      // Config 
      String url = "http://localhost:8080/jackrabbit/server/"; 
      String sourceWorkspaceName = "test-preview"; 

      // Setup 
      DavexClient Client = new DavexClient(url); 
      Repository repo = Client.getRepository(); 
      Credentials sc = new SimpleCredentials("admin", "admin".toCharArray()); 
      Session sourceSession = repo.login(sc, sourceWorkspaceName); 

      // Create a node 
      Node fooNode = sourceSession.getRootNode().addNode("fooNode"); 
      sourceSession.save(); 

      // Rename the node - GIVES EXCEPTION 
      sourceSession.move("/fooNode", "/fooNodeMoved"); 

      // This line is never reached 
      sourceSession.save(); 

     } catch (RepositoryException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

我每次清洗工作區運行以上之前。這裏是例外:

javax.jcr.RepositoryException: Internal Server Error 
     at org.apache.jackrabbit.spi2dav.ExceptionConverter.generate(ExceptionConverter.java:120) 
     at org.apache.jackrabbit.spi2dav.ExceptionConverter.generate(ExceptionConverter.java:51) 
     at org.apache.jackrabbit.spi2dav.ExceptionConverter.generate(ExceptionConverter.java:45) 
     at org.apache.jackrabbit.spi2dav.RepositoryServiceImpl.isGranted(RepositoryServiceImpl.java:904) 
     at org.apache.jackrabbit.jcr2spi.WorkspaceManager.canRead(WorkspaceManager.java:695) 
     at org.apache.jackrabbit.jcr2spi.state.ItemStateValidator.checkIsWritable(ItemStateValidator.java:199) 
     at org.apache.jackrabbit.jcr2spi.state.ItemStateValidator.checkRemoveItem(ItemStateValidator.java:431) 
     at org.apache.jackrabbit.jcr2spi.state.SessionItemStateManager.visit(SessionItemStateManager.java:282) 
     at org.apache.jackrabbit.jcr2spi.operation.Move.accept(Move.java:89) 
     at org.apache.jackrabbit.jcr2spi.state.SessionItemStateManager.execute(SessionItemStateManager.java:215) 
     at org.apache.jackrabbit.jcr2spi.SessionImpl.move(SessionImpl.java:323) 
     at Client.main(Client.java:32) 
Caused by: org.apache.jackrabbit.webdav.DavException: Internal Server Error 
     at org.apache.jackrabbit.webdav.client.methods.DavMethodBase.getResponseException(DavMethodBase.java:165) 
     at org.apache.jackrabbit.webdav.client.methods.DavMethodBase.checkSuccess(DavMethodBase.java:174) 
     at org.apache.jackrabbit.spi2dav.RepositoryServiceImpl.isGranted(RepositoryServiceImpl.java:876) 
     ... 8 more 

任何想法有什麼不對?這是我的代碼或環境問題嗎?

+0

同樣的問題,你解決了嗎?服務器說:java.lang.IllegalArgumentException:意外的資源路徑格式: – Falcon

+0

在這裏有同樣的問題...不知道如何解決它。 – pamobo0609

回答

2

我有同樣的問題。我解決它使用Workspace對象,而不是Session對象的移動方法:

getSession().getWorkspace().move(node.getPath(), parentPath + newName); 
0

這絕對是兔崽子,spi2dav問題 - 版本2.7.2。它在2.5.2版中不存在。

0

獵鷹的解決方法在Jackrabbit 2.7.0上爲我工作。我認爲這被報告爲JCR-3364的一部分。我只用了Jackrabbit 2.7.3,而Session.move和Workspace.move都按預期工作。

與下面的錯誤報告一樣,執行移動的用戶沒有對完整源和目標樹的讀取權限。 2.7.0版本錯誤地要求讀取/刪除/添加訪問整個樹,而不是僅移動節點和父節點。