我正在尝试更新" /"下的sitemap.xml文件; 。我收到了拒绝权限的错误,下面是代码片段。
XMLOutputFactory outputFactory = XMLOutputFactory.newFactory();
try {
Session session = repository.loginAdministrative(null);
XMLStreamWriter stream = outputFactory.createXMLStreamWriter(new FileWriter("/sitemap.xml"));
stream.writeStartDocument("1.0");
stream.writeStartElement("", "urlset", NS);
stream.writeNamespace("", NS);
write(page, stream, resourceResolver);
for (Iterator<Page> children = page.listChildren(new PageFilter(), true); children.hasNext();) {
write(children.next(), stream, resourceResolver);
}
stream.writeEndElement();
stream.writeEndDocument();
session.save();
} catch (XMLStreamException e) {
logger.error(e.getMessage());
}
catch (Exception ioex){
logger.error(ioex.getMessage());
}
}
即使我也在JCR中为此文件设置了权限,jcr的贡献者:所有访问权限。但仍然得到许可被拒绝错误。
由于
答案 0 :(得分:2)
以下行:
XMLStreamWriter stream = outputFactory.createXMLStreamWriter(new FileWriter("/sitemap.xml"));
在文件系统中创建文件,而不是JCR存储库中的节点。为了将结果保存到JCR节点,首先将其写入ByteArrayOutputStream,然后使用JCR API将缓冲区写入新节点:
// ByteArrayOutputStream bos already contains the serialized sitemap
ValueFactory vf = session.getValueFactor();
Binary binary = vf.createBinary(new ByteArrayInputStream(bos.toByteArray()));
Node rootNode = session.getRootNode();
Node sitemapNode = rootNode.addNode("sitemap.xml", "nt:file");
Node resNode= sitemapNode.addNode("jcr:content", "nt:resource");
resNode.setProperty ("jcr:data", binary);
session.save();
请注意,根节点(/
)可能不是编写任何内容的最佳位置。您应该在/content
中的某处编写地图,并使用Sling Mappings,自定义servlet或过滤器来处理/sitemap.xml
路径。
答案 1 :(得分:0)
您需要 root 权限才能修改/sitemap.xml
。你试过sudo
吗?
我想您要编辑程序目录中的XML ,因此请使用./sitemap.xml
。