Question

I have created and deployed a bundle(Servlet) successfully that accepts username and password from user, now I want to save it in JCR Repository under /content/mydata/ I am getting Exception

java.lang.IllegalArgumentException: relPath is not a relative path: {}  {}oliver

Here is my code

  public class CustomerJCRAccessImp implements CustomerService {
        @Reference
        protected SlingRepository repository;

    protected static final Logger log = LoggerFactory.getLogger(CustomerJCRAccessImp.class);

    public void insertData(String username, String password) throws Exception {

        log.error("Username ::"+username+" Password ::"+password);
        log.error("XXX:: Inside the Service Method");
        Session session=    repository.loginAdministrative(null);
        Node node= session.getRootNode();
        Node contentNode = node.getNode("content");
        //node.i
        Node  myAppNode = contentNode.getNode("myApp");
        log.error("THE VALUE OF myApp NODE ::"+myAppNode);


        Node user = myAppNode.addNode("/"+username);
        user.setProperty("Roll No", "1");
        user.setProperty("Age", "10");
        user.setPrimaryType("nt:unstructured");

        session.save();
        session.logout();




    }
    protected void bindRepository(SlingRepository repository) {
        this.repository = repository; 
    }
}

I have done this by referring this link http://helpx.adobe.com/experience-manager/using/persisting-cq-data-java-content.html Thanks in Advance.

Was it helpful?

Solution

The relative path parameter for the addNode() method shouldn't start with a "/". Try

Node user = videojetNode.addNode(username);

Though i agree that the term "relPath" in the docs is quite misleading, the relPath should either be the name of the node you would like to create under the current node or should start with the name of the child node and contains the relative path to the target node under which you want to create your node.

For example. In case the current node is content and you have the following tree

/
|_content
    |_x
       |_y

and if you wish to add a node called z as a child of y, then the relPath can be specified as

Node myNode = contentNode.addNode("x/y/z");

Note : A PathNotFoundException will be thrown in case any of the intermediary nodes are not available

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top