使用jcr apis Adob​​e Experience Manager6.0添加节点和属性时出错

时间:2016-06-14 17:17:33

标签: maven aem jcr

在我尝试添加节点和属性时使用JCR apis。我收到以下错误: 7520 [main] ERROR org.apache.jackrabbit.jcr2spi.hierarchy.ChildNodeEntriesImpl - ChildInfo迭代器包含多个具有相同名称的条目| index或uniqueID - >忽略ChildNodeInfo。

我在Pom.xml中添加了以下依赖项:

 <dependency>
    <groupId>org.apache.jackrabbit</groupId>
    <artifactId>jackrabbit-jcr-commons</artifactId>
    <version>2.12.1</version></dependency>


    <dependency>
       <groupId>org.apache.jackrabbit</groupId>
          <artifactId>jackrabbit-jcr2dav</artifactId>
          <version>2.0-beta6</version> </dependency>


    <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-simple</artifactId>
         <version>1.5.8</version></dependency>

Java代码:

package com.adobe.cq.impl;
import javax.jcr.Node;
import javax.jcr.Repository;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;

import org.apache.jackrabbit.commons.JcrUtils;



public class GetRepository {

    public static void main(String[] args) {
        try { 
            Repository repository = JcrUtils.getRepository("http://localhost:4502/crx/server");
            Session session=repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
            Node root=session.getRootNode();
            Node adobe = root.addNode("adobe");
            Node day = adobe.addNode("cq"); 
              day.setProperty("message", "Adobe Experience Manager is part of the Adobe Digital Marketing Suite!"); 


              // Retrieve content 
              Node node = root.getNode("adobe/cq"); 
              System.out.println(node.getPath()); 
              System.out.println(node.getProperty("message").getString()); 

              // Save the session changes and log out
              session.save(); 
              session.logout();
            }
            catch(Exception e){
                  e.printStackTrace();
                  }
        }}

1 个答案:

答案 0 :(得分:0)

存储库中不允许使用相同名称的兄弟节点。按照你的代码,没有检查节点&#34; adobe&#34;已存在于根节点下方。因此,如果节点已经创建/存在并且上述代码第二次执行,则可能会遇到此问题。

尝试检查节点可用性,如下所示。

Node adobe;
if (!root.hasNode("adobe")) {
    adobe = root.addNode("adobe");
} else {
    adobe = root.getNode("adobe");
}

if (!adobe.hasNode("cq")) {
    Node day = adobe.addNode("cq");
}