[jdom-interest] Namespace bug in SAXHandler?

Jason Hunter jhunter at acm.org
Tue Aug 21 09:46:44 PDT 2001


The removal of those lines to which you refer involved fixing another
namespace bug.

To help you, it'd be good if you could send a short (tiny) reproducible
test case.

-jh-

ecky at free.fr wrote:
> 
> Hi again,
> 
> Something different this time: namespaces :-)
> 
> switched now from from beta6+(cvs 20.06.01) to the
> beta7 available on the server and I encounter a
> namespace error that I did not have before.
> 
> Parsing the file:
> <?xml version="1.0" encoding="ISO-8859-1" ?>
> <candle:workingcontext xmlns:candle="http://www.candle.eu.org/">
>   <candle:contextnode candle:active="1">
>     <candle:label>Home</candle:label>
> ... snip
> 
> the attribute candle:active of the element candle:contextnode has
> no namespace, i.e. local namespace prefix="" uri="", and I don't know
> if this is correct.
> 
> I debuged compared the two versions in question and I found
> the probable reason why:
> 
> In beta6+ the method of SAXHandler looks like:
> 342    public void startElement(String namespaceURI, String localName,
> 343                             String qName, Attributes atts)
> 344                             throws SAXException {
> 345        if (suppress) return;
> 346
> 347        Element element = null;
> 348
> 349        if ((namespaceURI != null) && (!namespaceURI.equals(""))) {
> 350            String prefix = "";
> 351
> 352            // Determine any prefix on the Element
> 353            if (localName != qName) {
> 354                int split = qName.indexOf(":");
> 355                prefix = qName.substring(0, split);
> 356            }
> 357            Namespace elementNamespace =
> 358                Namespace.getNamespace(prefix, namespaceURI);
> 359            element = factory.element(localName, elementNamespace);
> 360
> 361            // Remove this namespace from those in the temp declared list
> 362            if (declaredNamespaces.size() > 0) {
> 363                declaredNamespaces.remove(elementNamespace);
> 364            }
> 365
> 366            // It's now in available scope
> 367            availableNamespaces.addFirst(elementNamespace);
> 368        } else {
> 369            element = factory.element(localName);
> 370        }
> 
> and in beta7 it looks like this:
> 342    public void startElement(String namespaceURI, String localName,
> 343                             String qName, Attributes atts)
> 344                             throws SAXException {
> 345        if (suppress) return;
> 346
> 347        Element element = null;
> 348
> 349        if ((namespaceURI != null) && (!namespaceURI.equals(""))) {
> 350            String prefix = "";
> 351
> 352            // Determine any prefix on the Element
> 353            if (localName != qName) {
> 354                int split = qName.indexOf(":");
> 355                prefix = qName.substring(0, split);
> 356            }
> 357            Namespace elementNamespace =
> 358                Namespace.getNamespace(prefix, namespaceURI);
> 359            element = factory.element(localName, elementNamespace);
> 360
> 361            // Remove this namespace from those in the temp declared list
> 362            if (declaredNamespaces.size() > 0) {
> 363                declaredNamespaces.remove(elementNamespace);
> 364            }
> 365        } else {
> 366            element = factory.element(localName);
> 367        }
> 
> in beta7 the lines 365-367 are missing, and that's probably why
> later in the same method (startElement) the namespace is not found
> (method: private Namespace getNamespace(String prefix) returns local namespace)
> 
> My question is there a reason for that these lines are missing or
> am I missing something?
> 
> cheers
> ecky
> 
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost.com



More information about the jdom-interest mailing list