java - 无法删除 jackrabbit 中的节点

标签 java jcr jackrabbit

我正在尝试删除使用 jackrabbit 保存的节点,但收到此错误。

Failed to  delete file
! javax.jcr.nodetype.ConstraintViolationException: Unable to perform operation. Node is protected.

这是我用来保存它的代码:

            session = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));

            Node parent = (Node) itemAtPath(parentPath, session);
            Node newNode = parent.addNode(nodeName);
            newNode.addMixin("mix:versionable");
            session.save(); // Create Root Node

            VersionableChanges changes = new VersionableChanges(newNode.getSession());
            changes.checkout(newNode);

            Binary binary = session.getValueFactory().createBinary(in);
            newNode.setProperty(PROPERTY_DATA, binary);
            newNode.setProperty(PROPERTY_NAME, fileName + System.currentTimeMillis());
            newNode.setProperty(PROPERTY_CREATEDBY, createdBy);
            newNode.setProperty(PROPERTY_CREATEDDATE, createdDate);
            newNode.setProperty(PROPERTY_COMMENT, comment);
            Value value = session.getValueFactory().createValue(binary);
            changes.checkin();
            session.save();

这是我用来删除它的代码:

            session = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
            Version fileVersion = null;
            Node fileNode = null;

            if (version != null && !version.isEmpty()) {
                fileVersion = session.getWorkspace().getVersionManager().getVersionHistory(path).getVersion(version);
            } else {
                fileVersion = session.getWorkspace().getVersionManager().getBaseVersion(path);
            }

            fileNode = fileVersion.getFrozenNode();
            fileNode.remove();
            //need to save session to persist the remove operation
            session.save();                     

如何克服这个错误?

最佳答案

卡住节点受到保护,因为删除它们可能(可能)使版本存储处于损坏状态。为了从历史记录中删除“完整”版本,您必须执行以下操作:

VersionHistory history = session.getWorkspace().getVersionManager()
                            .getVersionHistory(info.getVersionedNodePath());
history.removeVersion(info.getVersionName());
session.save();

关于java - 无法删除 jackrabbit 中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38436449/

相关文章:

java - 从部署在 Apache Tomcat 上的 Java 代码执行命令

java - properties-maven-plugin 未正确设置系统属性

java - 什么是与现有 Java 网站集成的好 CMS(需要好的 API)

spring - 如何整合Spring和Apache Jackrabbit?

backup - 如何在 Apache Sling 中执行正确的备份

java - 如何在 java 中使用 HttpURLConnection 发送多部分 POST 请求?

aem - 在 CQ5 中获取节点表单 currenPage

java - 是否有实现 JCR API 的 ModeShape Java 客户端?

java - 高级 Java 文件系统内容操作 : old style vs. jcr?

java - JCR (JackRabbit) 查询返回空结果