[ 
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.

Reply via email to