[jdom-interest] JDOM 1.1.2 / Saxon 9.4.0.1: namespace xmlns="" could not be added as a namespace

Leigh L Klotz Jr leigh.klotz at xerox.com
Tue Jan 24 13:13:19 PST 2012


Thanks, Rolf.  This is more than enough analysis on your part.  I 
appreciate it.
Leigh.

On 01/24/2012 12:30 PM, Rolf Lear wrote:
>
> Hi Leigh.
>
> I am at my office so I can't debug this issue right now... and
> additionally I have not played with Saxon XSLT code.
>
> but, inspecting the JDOM 1.1.2 code it is 'clear' that the Saxon code
> triggered the following Sax 'events':
>
>
> ...
> // maybe some other startPrefixMapping(..., ...);
> startPrefixMapping("", "");  // indicate that the "" prefix is linked to
> the "" URI
> startElement("http://example.com/foo", "bar", "bar", attributes);
> ...
>
>
> This is a broken chain of SAX events.... it is indicating that the ""
> prefix maps to "" (xmlns=""), but then loads the element in the foo
> namespace xmlns="http://example.com/foo"
>
> In the particular examples you cite there should be exactly one
> startPrefixMapping("", "") call per document and it should happen before
> the 'document' start element (or will it be zero calls for "","" since it
> is assumed... I forget).
>
> when the new element processes the 'additional' namespace xmlns="" it
> finds that the element itself has the "" prefix, but it is mapped to a
> different URI. Hence the exception.
>
> Now, as to why this is different in 1.1.2 vs. 1.1.1 I am not sure.... and
> that in itself is suspicious....
>
> If you have the code in hand you can more easily debug the issue...
> (easier than me right now...).
>
> I can load it up in a few hours time and inspect it too. I suspect that
> the issue is a Saxon one, but then why the difference between 1.1.1 and
> 1.1.2 ... I am not sure.
>
> Rolf
>
>
>
> On Tue, 24 Jan 2012 11:26:41 -0800, Leigh L Klotz Jr
> <leigh.klotz at xerox.com> wrote:
> > Has anyone encountered this? It doesn't happen with JDOM 1.1.1, but it
> > does happen with JDOM 1.1.2.
> >
> > Vanilla XSLT transform:
> >
> > <?xml version="1.0"?>
> > <xsl:transform version="1.0"
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> > <xsl:template match="*|@*|text()">
> > <xsl:copy-of select="." />
> > </xsl:template>
> > </xsl:transform>
> >
> > Document with default namespace change and any attribute on the 
> element:
>
> > FAILS:
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <description>
> > <foo xmlns="http://example.com/foo">
> > <bar x="...">...</bar>
> > </foo>
> > </description>
> >
> > Document with default namespace change and no attribute on the element:
> > WORKS:
> > <?xml version="1.0" encoding="UTF-8"?>
> > <description>
> > <foo xmlns="http://example.com/foo">
> > <bar >...</bar>
> > </foo>
> > </description>
> >
> > Here's the error:
> >
> > org.jdom.IllegalAddException: The namespace xmlns="" could not be added
> > as a namespace to "bar": The namespace prefix "" collides with the
> > element namespace prefix
> >      at org.jdom.Element.addNamespaceDeclaration(Element.java:363)
> >      at
> org.jdom.input.SAXHandler.transferNamespaces(SAXHandler.java:714)
> >      at org.jdom.input.SAXHandler.startElement(SAXHandler.java:563)
> >      at
> >
> net.sf.saxon.event.ContentHandlerProxy.startContent(ContentHandlerProxy.java:366) 
>
> >      at
> >
> net.sf.saxon.event.NamespaceReducer.startContent(NamespaceReducer.java:192) 
>
> >      at
> >
> net.sf.saxon.event.ComplexContentOutputter.startContent(ComplexContentOutputter.java:583) 
>
> >      at
> > net.sf.saxon.tree.tiny.TinyElementImpl.copy(TinyElementImpl.java:350)
> >      at
> > net.sf.saxon.expr.instruct.CopyOf.processLeavingTail(CopyOf.java:510)
> >      at
> > net.sf.saxon.expr.instruct.Template.applyLeavingTail(Template.java:212)
> >      at net.sf.saxon.trans.Mode.applyTemplates(Mode.java:1032)
> >      at
> >
> net.sf.saxon.trans.TextOnlyCopyRuleSet.process(TextOnlyCopyRuleSet.java:58) 
>
> >      at net.sf.saxon.trans.Mode.applyTemplates(Mode.java:1020)
> >      at net.sf.saxon.Controller.transformDocument(Controller.java:1957)
> >      at net.sf.saxon.Controller.transform(Controller.java:1803)
> >      at
> > net.sf.saxon.s9api.XsltTransformer.transform(XsltTransformer.java:430)
> >
> >
> > I'm using this code fragment to tell Saxon9 to serialize to JDOM:
> >
> >    import net.sf.saxon.s9api.SAXDestination;
> >    import org.jdom.input.SAXHandler;
> >    import net.sf.saxon.s9api.Destination;
> >
> >    SAXHandler saxHandler = new SAXHandler();
> >    Destination saxDestination = new SAXDestination(saxHandler);
> >    xsltTransformer.setSource(new JDOMSource(document));
> >    xsltTransformer.setDestination(saxDestination);
> >    xsltTransformer.transform();
> >
> > If this isn't a JDOM bug, then I guess it must be a Saxon one.
> >
> > Leigh.
> >
> > _______________________________________________
> > To control your jdom-interest membership:
> > http://www.jdom.org/mailman/options/jdom-interest/youraddr@yourhost.com
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.jdom.org/pipermail/jdom-interest/attachments/20120124/ecea23dc/attachment.html>


More information about the jdom-interest mailing list