Jackrabbit Content Repository
  1. Jackrabbit Content Repository
  2. JCR-1787

XmlHandler export functions don't work in XML repository mode - causes XML with XSLT dependencies to show up with jcr:content XML element.

    Details

    • Type: Bug Bug
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: jackrabbit-jcr-server
    • Labels:
      None

      Description

      I can't view XML files with XSLT dependencies because the XML returned from XML requests will come back as the "jcr:content" XML representation.

      <?xml version="1.0" encoding="UTF-8" ?>
      <jcr:content xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" xmlns:sv="http://www.jcp.org/jcr/sv/1.0" xmlns:mix="http://www.jcp.org/jcr/mix/1.0" xmlns:xrc="http://www.xerceo.com/learn/jcr-1.0" xmlns:rep="internal" jcr:primaryType="nt:resource" jcr:uuid="33951e14-7a9a-4746-b848-4f931f4c01be" jcr:data="" jcr:encoding="UTF-8" jcr:lastModified="2008-10-06T14:46:43.965-05:00" jcr:mimeType="text/xml" />

      I suggest changes to package org.apache.jackrabbit.server.io.XmlHandler:

      1) Create new method:

      /**

      • @see DefaultHandler#exportData(ExportContext, boolean, Node)
        */
        protected void exportData(ExportContext context, boolean isCollection, Node contentNode) throws IOException, RepositoryException {
        // first child of content is XML document root
        if (contentNode.getNodes().hasNext()) { contentNode = contentNode.getNodes().nextNode(); }

      OutputStream out = context.getOutputStream();
      out.write(ValueHelper.serialize(contentNode.getProperty("jcr:data").getValue(), false).getBytes());
      }

      Change canExport method:

      /**

      • @see IOHandler#canExport(ExportContext, boolean)
        */
        public boolean canExport(ExportContext context, boolean isCollection) {
        if (super.canExport(context, isCollection)) {
        String mimeType = null;
        try
        Unknown macro: { Node contentNode = getContentNode(context, isCollection); if (contentNode.hasProperty(JcrConstants.JCR_MIMETYPE)) { mimeType = contentNode.getProperty(JcrConstants.JCR_MIMETYPE).getString(); } else { mimeType = context.getMimeResolver().getMimeType(context.getExportRoot().getName()); } }

        catch (RepositoryException e)

        { // ignore and return false }

        return XML_MIMETYPE.equals(mimeType);
        }
        return false;
        }

      This causes my server to return the correct XML then

      1. XmlHandler.java
        9 kB
        Nicholas DiPiazza

        Activity

          People

          • Assignee:
            Unassigned
            Reporter:
            Nicholas DiPiazza
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:

              Development