Re: JDOM 1.1.2 / Saxon 9.4.0.1: namespace xmlns="" could not be added as a namespace

Leigh L Klotz Jr <[email protected]>
Newsgroups gmane.comp.java.jdom.general
Message-ID <[email protected]>
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
> <[email protected]> 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/[email protected]
>

_______________________________________________
To control your jdom-interest membership:
http://www.jdom.org/mailman/options/jdom-interest/[email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.