2015-06-01 3 views
1

У меня есть строка, которая является путем страницы, например, /content/xperia/public/events/eventeditor. Я перенаправляю XML этой страницы и сохраняю ее в DAM, но я хочу сохранить ее в подобной древовидной структуре под /content.Как создать каталог на основе пути в cq5?

Я попытался следующий код

String page = "/content/xperia/public/events/eventeditor"; 
page = page.replace("/content", "/content/dam"); 
if (adminSession.nodeExists(page+ "/"+ "jcr:content")) { 
    Node node = adminSession.getNode(page+ "/"+ "jcr:content"); 
    node.setProperty("jcr:data", sb.toString());     
} else { 
    Node feedNode = JcrUtil.createPath(page,"nt:file", adminSession);   
    Node dataNode = JcrUtil.createPath(feedNode.getPath() + "/"+ "jcr:content", "nt:resource", adminSession);  
    dataNode.setProperty("jcr:data",sb.toString()); 
} 

Но это дает следующее сообщение об ошибке

Нет соответствующего определения дочернего узла найдено для {http://www.jcp.org/jcr/1.0} содержание не

Поскольку есть нет такого пути в репозитории. Есть ли способ, с помощью которого я могу создать каталог на лету. Поскольку для сохранения этого файла мне нужно создать все дерево xperia/public/events под /content/dam, а затем сохранить eventeditor.xml в этом каталоге.

Просьба предложить.

ответ

4

С кодом есть несколько проблем. JcrUtil.createPath(String absolutePath, String nodeType, Session session) создает все несуществующие промежуточные пути с заданным NodeType.

Это означает, что все узлы xperia, public и события создаются с типом nt:file вместо sling:OrderedFolder.

Вместо этого вы можете использовать метод createPath(String absolutePath, boolean createUniqueLeaf, String intermediateNodeType, String nodeType, Session session, boolean autoSave), чтобы указать тип промежуточных узлов, которые должны быть созданы.

String page = "/content/xperia/public/events/eventeditor"; 
page = page.replace("/content", "/content/dam"); 
page += ".xml"; 

if (adminSession.nodeExists(page+ "/"+ "jcr:content")) { 
    Node node = adminSession.getNode(page+ "/"+ "jcr:content"); 
    node.setProperty("jcr:data", sb.toString());     
} else { 
    Node feedNode = JcrUtil.createPath(page, true, "sling:OrderedFolder", "nt:file", adminSession, false);   
    Node dataNode = feedNode.addNode("jcr:content", "nt:resource");  
    dataNode.setProperty("jcr:data",sb.toString()); 
} 

adminSession.save(); 
+0

Благодаря Rakhi .... у г большой .. это работает :) .. еще одна вещь, если я должен запросить эти XML от стороннего приложения, forthat мне нужно передать полномочия в URL. как я могу пройти, чтобы получить аутентификацию и получить эти данные xml по запросу. предположим, что если мой xml-путь - localhost: 4504/xperian/roi/events.xml и пароль cq - admin, то какой будет url – user2142786

+0

Я не уверен, что можно отправить учетные данные через URL. Я думаю, что возможна только базовая аутентификация. Anyways любезно размещайте его как отдельный вопрос, чтобы другие могли видеть и отвечать. – rakhi4110

+0

ok i will ... Я ищу это, если все же я не найду никакого решения, тогда я отправлю его .. Спасибо buddy :) – user2142786

Смежные вопросы