[jdom-interest] Bug in SAXOutputter

PJ Fanning pj.fanning at polarlake.com
Tue Mar 16 04:40:08 PST 2004


Hi,
I think there is a bug in the way SAXOutputter handles default namespaces. I
have a document with the following format:

<?xml version="1.0"?>
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
  <Body>
    <connectResponse xmlns="">
      <sessionID>1</sessionID>
    </connectResponse>
  </Body>
</Envelope>

The SAXOutputter does not create startPrefixMapping or endPrefixMapping
events when it reaches the <connectResponse> element.

The current startPrefixMapping says:
        Namespace ns = element.getNamespace();
        if (ns != Namespace.NO_NAMESPACE && ns != Namespace.XML_NAMESPACE) {
            String prefix = ns.getPrefix();
            String uri = namespaces.getURI(prefix);
            if (!ns.getURI().equals(uri)) {
                namespaces.push(ns);
                nsAtts = this.addNsAttribute(nsAtts, ns);
                try {
                    contentHandler.startPrefixMapping(prefix, ns.getURI());
                }
                catch (SAXException se) {
                   throw new JDOMException(
                       "Exception in startPrefixMapping", se);
                }
            }
        }

I've changed this to:
        Namespace ns = element.getNamespace();
        if (ns != Namespace.XML_NAMESPACE) {
            boolean add = false;
            if (ns == Namespace.NO_NAMESPACE) {
                String uri = namespaces.getURI(ns.getPrefix());
                if(uri != null && uri.length() > 0)
                    add = true;
            }
            else {
                String uri = namespaces.getURI(ns.getPrefix());
                if (!ns.getURI().equals(uri))
                    add = true;
            }
            if (add) {
                namespaces.push(ns);
                nsAtts = this.addNsAttribute(nsAtts, ns);
                try {
                    contentHandler.startPrefixMapping(ns.getPrefix(),
ns.getURI());
                }
                catch (SAXException se) {
                   throw new JDOMException(
                       "Exception in startPrefixMapping", se);
                }
            }
        }

I have attached a patched version of SAXOutputter (based on the latest
source in CVS). Could someone double-check that this change is okay and
consider adding it to the forthcoming v1.0 release?

Regards,
PJ

-------------- next part --------------
A non-text attachment was scrubbed...
Name: SAXOutputter.java
Type: application/octet-stream
Size: 48697 bytes
Desc: not available
Url : http://jdom.org/pipermail/jdom-interest/attachments/20040316/231d42e6/SAXOutputter.obj


More information about the jdom-interest mailing list