Uploaded image for project: '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.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • None
    • None
    • jackrabbit-jcr-server
    • 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

      Attachments

        1. XmlHandler.java
          9 kB
          Nicholas DiPiazza

        Activity

          People

            Unassigned Unassigned
            nicholas.dipiazza Nicholas DiPiazza
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated: