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.

Attach filesAttach ScreenshotAdd voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    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

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            nicholas.dipiazza Nicholas DiPiazza

            Dates

              Created:
              Updated:

              Slack

                Issue deployment