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

        Jukka Zitting made changes -
        Workflow jira [ 12443577 ] no-reopen-closed, patch-avail [ 12467806 ]
        Jukka Zitting made changes -
        Component/s jackrabbit-jcr-server [ 12312058 ]
        Nicholas DiPiazza made changes -
        Attachment XmlHandler.java [ 12391741 ]
        Nicholas DiPiazza made changes -
        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="PD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0iaHR0cDovLzE5Mi4xNjguMi41Ojg3ODcvL3hsZWFybi9pbmZ1c2UveHNsdC9sYXlvdXRfMV8xXzEueHNsIj8+PGFjdGl2aXR5IGxvb2tuZmVlbD0iYmx1ZV9zdHJlYW0iIHdlYmFwcEN0eHQ9Ii94bGVhcm4iIGFjdGl2aXR5VGVtcGxhdGVJZD0ibGF5b3V0XzFfMV8xIiBmb290ZXI9InRydWUiIGhlYWRlcj0idHJ1ZSIgaWQ9ImFjdGl2aXR5MC43Mjc3NDIyODAzMzgxNTQwLjM2OTkyNzcxOTE3MTczMjEiIG5hcnJhdGlvbkF1dG9TdGFydD0iIiBuYXJyYXRpb25QYXRoPSIiIG5hcnJhdGlvblNob3dQbGF5ZXI9IiIgbmFycmF0aW9uVXVpZD0iIiB0aXRsZT0iQWN0aXZpdHkgMSI+PGNlbGxzLz48L2FjdGl2aXR5Pg==" 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 {
                        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

        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 {
                        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

        Nicholas DiPiazza made changes -
        Field Original Value New Value
        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="PD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0iaHR0cDovLzE5Mi4xNjguMi41Ojg3ODcvL3hsZWFybi9pbmZ1c2UveHNsdC9sYXlvdXRfMV8xXzEueHNsIj8+PGFjdGl2aXR5IGxvb2tuZmVlbD0iYmx1ZV9zdHJlYW0iIHdlYmFwcEN0eHQ9Ii94bGVhcm4iIGFjdGl2aXR5VGVtcGxhdGVJZD0ibGF5b3V0XzFfMV8xIiBmb290ZXI9InRydWUiIGhlYWRlcj0idHJ1ZSIgaWQ9ImFjdGl2aXR5MC43Mjc3NDIyODAzMzgxNTQwLjM2OTkyNzcxOTE3MTczMjEiIG5hcnJhdGlvbkF1dG9TdGFydD0iIiBuYXJyYXRpb25QYXRoPSIiIG5hcnJhdGlvblNob3dQbGF5ZXI9IiIgbmFycmF0aW9uVXVpZD0iIiB0aXRsZT0iQWN0aXZpdHkgMSI+PGNlbGxzLz48L2FjdGl2aXR5Pg==" 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 {
                        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:

        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="PD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0iaHR0cDovLzE5Mi4xNjguMi41Ojg3ODcvL3hsZWFybi9pbmZ1c2UveHNsdC9sYXlvdXRfMV8xXzEueHNsIj8+PGFjdGl2aXR5IGxvb2tuZmVlbD0iYmx1ZV9zdHJlYW0iIHdlYmFwcEN0eHQ9Ii94bGVhcm4iIGFjdGl2aXR5VGVtcGxhdGVJZD0ibGF5b3V0XzFfMV8xIiBmb290ZXI9InRydWUiIGhlYWRlcj0idHJ1ZSIgaWQ9ImFjdGl2aXR5MC43Mjc3NDIyODAzMzgxNTQwLjM2OTkyNzcxOTE3MTczMjEiIG5hcnJhdGlvbkF1dG9TdGFydD0iIiBuYXJyYXRpb25QYXRoPSIiIG5hcnJhdGlvblNob3dQbGF5ZXI9IiIgbmFycmF0aW9uVXVpZD0iIiB0aXRsZT0iQWN0aXZpdHkgMSI+PGNlbGxzLz48L2FjdGl2aXR5Pg==" 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 {
                        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

        Nicholas DiPiazza created issue -

          People

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

            Dates

            • Created:
              Updated:

              Development