无法在sitemap.xml上写入(权限被拒绝)

时间:2015-03-14 08:12:05

标签: cq5 aem

我正在尝试更新" /"下的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的贡献者:所有访问权限。但仍然得到许可被拒绝错误。

由于

2 个答案:

答案 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