Невозможно переместить (переименовать) узел с помощью Jackrabbit и WebDAV

Я пытаюсь переименовать узел в Jackrabbit, но это не удается, как показано ниже. Учитывая узел «/fooNode», я хочу, чтобы он был переименован в «/fooNodeRenamed».

Мой клиент представляет собой простую программу на Java, основанную на JavaDavexClient с использованием 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

Есть идеи, что случилось? Это проблема с моим кодом или средой?


person fazy    schedule 20.06.2013    source источник
comment
Та же проблема, решил? Сервер сказал: java.lang.IllegalArgumentException: Неожиданный формат пути к ресурсу:   -  person Falcon    schedule 09.11.2013
comment
У меня такая же проблема... Не знаю, как ее решить.   -  person pamobo0609    schedule 06.07.2017


Ответы (3)


У меня такая же проблема. Я решил это, используя метод перемещения объекта Workspace вместо объекта Session:

getSession().getWorkspace().move(node.getPath(), parentPath + newName);
person Falcon    schedule 09.11.2013

Это определенно проблема с jackrabbit-spi2dav — версия 2.7.2. В версии 2.5.2 его не было.

person Nigel Sheridan-Smith    schedule 19.11.2013

Обходной путь Falcon работал у меня на Jackrabbit 2.7.0. Я думаю, что он был исправлен как часть JCR-3364. Я только что попробовал с Jackrabbit 2.7.3, и оба Session.move и Workspace.move работают, как и ожидалось.

Как и в приведенном ниже отчете об ошибке, у пользователя, выполнявшего перемещение, не было доступа для чтения ко всему исходному и целевому дереву. Версия 2.7.0 ошибочно требовала доступа для чтения/удаления/добавления ко всему дереву, а не только к перемещению узлов и родителей.

person massfords    schedule 27.12.2013