[jdom-interest] NullPointerException in Element.setAttribute(final String name, final String value, final Namespace ns)

gisella.saavedra at navis.com gisella.saavedra at navis.com
Fri Apr 6 14:48:45 PDT 2012


Rolf,

I believe you might be looking at the wrong method:

This is JDOM 1.0  (ns is passed as null)

   public Element setAttribute(String name, String value, Namespace ns) {
        return setAttribute(new Attribute(name, value, ns));
    }

Inside this code, the constructor new Attribute(name, value, ns) calls:

public Attribute(String name, String value, Namespace namespace) {
        setName(name);
        setValue(value);
        setNamespace(namespace);
    }

Here setNamespace(namespace) calls:
public Attribute setNamespace(Namespace namespace) {
        if (namespace == null) {
            namespace = Namespace.NO_NAMESPACE;
        }

        // Verify the attribute isn't trying to be in a default namespace
        // Attributes can't be in a default namespace
        if (namespace != Namespace.NO_NAMESPACE &&
            namespace.getPrefix().equals("")) {
            throw new IllegalNameException("", "attribute namespace",
                "An attribute namespace without a prefix can only be the " +
                "NO_NAMESPACE namespace");
        }
        this.namespace = namespace;
        return this;
    }

where namespace being null is set to NO_NAMESPACE.




Stack trace:

java.lang.NullPointerException
    at org.jdom.AttributeList.indexOf(AttributeList.java:378)
    at org.jdom.AttributeList.get(AttributeList.java:366)
    at org.jdom.Element.getAttribute(Element.java:1004)
    at org.jdom.Element.setAttribute(Element.java:1178)
    at com.navis.argo.business.snx.AbstractXmlExporter.setAttribute(AbstractXmlExporter.java:40)


--------------


-----Original Message-----
From: Rolf Lear [mailto:jdom at tuis.net] 
Sent: Friday, April 06, 2012 2:40 PM
To: Saavedra Gisella
Cc: jdom-interest at jdom.org
Subject: Re: [jdom-interest] NullPointerException in Element.setAttribute(final String name, final String value, final Namespace ns)

Hi Gisella.

I have looked through the JDOM 1.0 code. JDOM 1.0 was released in 
September 2004. Here's the code as it was at the time:

Here's the getAttribute method:
https://github.com/hunterhacker/jdom/blob/jdom-1.0/core/src/java/org/jdom/Element.java#L980

Here's the attributes.get(String,Namespace) method:
https://github.com/hunterhacker/jdom/blob/jdom-1.0/core/src/java/org/jdom/AttributeList.java#L365

And that calls the indexOf(String,Namespace) method:
https://github.com/hunterhacker/jdom/blob/jdom-1.0/core/src/java/org/jdom/AttributeList.java#L377

Which calls namespace.getURI().

The way I see it is that JDOM 1.0 would always throw a 
NullPointerException if you gave it a null Namespace.

I don't think it would have ever worked in JDOM 1.0...

Did you have your own custom build of JDOM 1.0?

Rolf

On 06/04/2012 5:08 PM, Rolf Lear wrote:
> Hi Gisella.
>
> Is it possible to send us a stack trace, at least the parts including
> the org.jdom.* code.
>
> Thanks
>
> Rolf
>
>
> On 06/04/2012 1:43 PM, gisella.saavedra at navis.com wrote:
>> I just upgraded from jdom 1.0 to jdom 1.1.3
>>
>> and I was setting an attribute where the namespace was NULL.
>>
>> The old code was different, it was NOT calling get(...), so it was setting
>> the namespace to namespace.NO_NAMESPACE when the namespace was NULL,
>>
>> before calling this get(...)
>>
>> but the new code, when it calls getAttribute(name, ns) (first line of
>> method described)
>>
>> is getting a null pointer on the namespace.
>>
>> Probably the namespace needs to be set to NO_NAMESPACE before calling
>> get(..) when it is NULL.
>>
>> *Gisella Saavedra**
>> *Framework Team
>> _gsaavedra at navis.com <mailto:gsaavedra at navis.com>_
>>
>>
>>
>> http://www.navis.com/images/spacer.gif
>>
>> 1000 Broadway, Suite 150, Oakland, CA 94607 | T+1 510 267 5123 T Main+1
>> 510 267 5000 F+1 510 267 5100 | _http://www.navis.com
>> <http://www.navis.com/>_
>>
>>
>>
>> _______________________________________________
>> To control your jdom-interest membership:
>> http://www.jdom.org/mailman/options/jdom-interest/youraddr@yourhost.com
>
> _______________________________________________
> To control your jdom-interest membership:
> http://www.jdom.org/mailman/options/jdom-interest/youraddr@yourhost.com
>




More information about the jdom-interest mailing list