[
https://issues.apache.org/jira/browse/JCR-1952?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12673583#action_12673583
]
Jukka Zitting commented on JCR-1952:
------------------------------------
This is a pretty tricky issue.
The reason why Jackrabbit adds those extra xmlns attributes is that at least
the default XML serializer in Sun Java 1.4 does not include xmlns settings in
the serialized XML stream without those attributes (even if the correct
startPrefixMapping() calls are made and the namespaces used in the exported
elements). Unfortunately it seems like some serializers will add their own xmns
attributes regardless of whether they already exist for an element, causing
duplicate namespace declarations to occur.
We could (and should) use the new SerializingContentHandler class also for the
XML export methods (curiously that seems to be the only XML serialization case
where we *don't* yet use the new class) to automatically add the extra xmlns
attributes only when they really are needed. This would solve the problem of
duplicate xmlns attributes.
However, many XML serializers that do output the needed xmlns attributes, only
do so for namespaces that are actually referenced in the serialized elements.
This is troublesome for JCR, where XML exports are always required to contain
*all* registered namespaces even when the exported subtree doesn't reference
them. I consider this a flaw in the JCR spec, but we still need to honor this
requirement and make sure that all the xmlns attributes are included in the
serialized output.
I guess we need to extend the SerializingContentHnalder even more to detect the
case when it needs to inject xmlns attributes only for unused namespaces.
> DOMException: NAMESPACE_ERR thrown when exporting document view
> ---------------------------------------------------------------
>
> Key: JCR-1952
> URL: https://issues.apache.org/jira/browse/JCR-1952
> Project: Jackrabbit Content Repository
> Issue Type: Bug
> Components: xml
> Affects Versions: 1.5.2
> Reporter: Lóránt Pintér
> Attachments: MANIFEST.MF
>
>
> When I try to export some nodes with ExportDocumentView I get a DOMException
> with Jackrabbit 1.5.2. Version 1.4.6 works fine. Xerces version was 2.8.1.
> Code:
> Document document = documentBuilder.newDocument();
> Element exportElement = (Element)
> document.appendChild(document.createElement("Export"));
> Result result = new DOMResult(exportElement);
> TransformerHandler transformerHandler =
> saxTransformerFactory.newTransformerHandler();
> transformerHandler.setResult(result);
> session.exportDocumentView(workflowNode.getPath(), transformerHandler, true,
> false);
> Exception:
> org.w3c.dom.DOMException: NAMESPACE_ERR: An attempt is made to create or
> change an object in a way which is incorrect with regard to namespaces.
> at org.apache.xerces.dom.CoreDocumentImpl.checkDOMNSErr(Unknown Source)
> at org.apache.xerces.dom.AttrNSImpl.setName(Unknown Source)
> at org.apache.xerces.dom.AttrNSImpl.<init>(Unknown Source)
> at org.apache.xerces.dom.CoreDocumentImpl.createAttributeNS(Unknown
> Source)
> at org.apache.xerces.dom.ElementImpl.setAttributeNS(Unknown Source)
> at
> com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM.startElement(SAX2DOM.java:194)
> at
> com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.closeStartTag(ToXMLSAXHandler.java:204)
> at
> com.sun.org.apache.xml.internal.serializer.ToSAXHandler.flushPending(ToSAXHandler.java:277)
> at
> com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.startElement(ToXMLSAXHandler.java:646)
> at
> com.sun.org.apache.xalan.internal.xsltc.trax.TransformerHandlerImpl.startElement(TransformerHandlerImpl.java:263)
> at
> org.apache.jackrabbit.commons.xml.Exporter.startElement(Exporter.java:438)
> at
> org.apache.jackrabbit.commons.xml.DocumentViewExporter.exportNode(DocumentViewExporter.java:76)
> at
> org.apache.jackrabbit.commons.xml.Exporter.exportNode(Exporter.java:298)
> at
> org.apache.jackrabbit.commons.xml.Exporter.exportNodes(Exporter.java:214)
> at
> org.apache.jackrabbit.commons.xml.DocumentViewExporter.exportNode(DocumentViewExporter.java:77)
> at
> org.apache.jackrabbit.commons.xml.Exporter.exportNode(Exporter.java:295)
> at org.apache.jackrabbit.commons.xml.Exporter.export(Exporter.java:144)
> at
> org.apache.jackrabbit.commons.AbstractSession.export(AbstractSession.java:461)
> at
> org.apache.jackrabbit.commons.AbstractSession.exportDocumentView(AbstractSession.java:241)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.