[jdom-interest] RE: Bug in SAXOutputter

PJ Fanning pj.fanning at polarlake.com
Fri Apr 2 02:45:50 PST 2004


Hi,
I recently submitted a patch for the SAXOutputter to the list. This class
does not handle the case where qualified elements have unqualified elements
for children correctly. I was wondering if this patch might be included in
the next version of JDOM and when this was likely to be released.

Regards,
PJ

-----Original Message-----
From: PJ Fanning 
Sent: 16 March 2004 12:40
To: 'jdom-interest at jdom.org'
Subject: Bug in SAXOutputter


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



More information about the jdom-interest mailing list