Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
None
-
None
-
None
-
None
-
PatchAvailable
Description
During work on xalanj-2219, which Henry Zongaro reviewed, he found a related bug where
an attribute added through manipulation of a DOM would cause a prefix collision.
His testcase was similar to the one in xalanj-2219. First create an element named "p:child" in namespace URI "child".
When serialized this element would look like this:
<p:child xmlns='child' />
Then to this DOM Element, add an attribute named q:attr with value 'val' and have attribute in the namespace 'moo'.
When serialized this element would look like this:
<p:child xlmns='child' q:attr='val' xmlns:q='moo' />
Now to cause the collision have the name of the attribute be 'p:attr'. The prefix p must map to both 'child' and to 'moo'.
The only way out is to NOT use p for one of the prefixes, and to pick a new one that is not mapped, something like this:
<p:child xmlns='child' ns0:attr='val' xmlns:ns0='moo' />
Henry's testcase, much like the one in xalanj-2219 is this:
-------------------------------------------------------------------------------
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;
public class j2219b {
private static final String IDENTITY_XSLT_WITH_INDENT =
"<xsl:stylesheet version='1.0' " +
"xmlns:xsl='http://www.w3.org/1999/XSL/Transform' " +
"xmlns:xalan='http://xml.apache.org/xslt' " +
"exclude-result-prefixes='xalan'>" +
"<xsl:output method='xml' indent='yes' xalan:indent-amount='4'/>" +
"<xsl:template match='@*|node()'>" +
"<xsl:copy>" +
"<xsl:apply-templates select='@*|node()'/>" +
"</xsl:copy>" +
"</xsl:template>" +
"</xsl:stylesheet>";
public static void main(String[] args) throws Exception
}
-------------------------------------------------------------------------------
Now there is a problem. When serialized the same prefix cannot be used
Attachments
Attachments
Issue Links
- is related to
-
XALANJ-2219 Namespace of child element written incorrectly as root namespace
- Resolved
- relates to
-
XALANJ-2219 Namespace of child element written incorrectly as root namespace
- Resolved