[jdom-interest] getAttributeValue(): wrong signatures?

Jason Hunter jhunter at servlets.com
Tue Apr 30 10:39:05 PDT 2002


Actually, I don't believe there are any "get" methods left in the API
that treat a Namespace as a String.  They've been gone for a while.  It
caused too many varieties of each method.  If you want to use a
namespace, you use a Namespace object.  Once you know that, there's no
surprise here.

-jh-

Elliotte Rusty Harold wrote:
> 
> I recently wrote the following code for an example program without
> looking at the JavaDocs:
> 
>   public final static String XLINK_NAMESPACE   =
> "http://www.w3.org/1999/xlink";
> 
> // ...
> 
>        String href    = input.getAttributeValue("href", XLINK_NAMESPACE);
>        String title   = input.getAttributeValue("title", XLINK_NAMESPACE);
>        String role    = input.getAttributeValue("role", XLINK_NAMESPACE);
>        String arcrole = input.getAttributeValue("arcrole", XLINK_NAMESPACE);
> 
> It compiled, but it exhibited strange runtime errors. Specifically, it
> output the XLink namespace URI repeatedly instead of the values of the
> various attributes.
> 
> What's going on is that the signature getAttributeValue(String, String)
> does not indicate what to me is the most natural possibility:
> 
> public String getAttributeValue(String localName, String namespaceURI)
> 
> Instead it has this signature:
> 
> public String getAttributeValue(String localName, String defaultValue)
> 
> At least for me, this violates the principal of least surprise. When I'm
> writing code I'm a lot more likely to ask for an attribute by name and
> namespace URI than I am to ask for attribute by name only+default value.
> Furthermore, when I'm guessing what the correct signature is for
> requesting an attribute by name and URI, I'll likely come up with
> getAttributeValue(String localName, String namespaceURI). I don't think
> I'd eever guess that there was an option to supply a default value. I
> twouldn't occur to me to even ask the question. It's perhaps a nice
> little convenience, but it's not a fundamental peice of funcitonality
> for an XML API. Asking ofr an attribute by name and URI is fundamental,
> and really deserves to have the signature.
> 
> Another problem, is that this is a really significant method call that
> really requires the user to be familar with the Namespace class. In
> fact, I'm not sure if anyother classes actually require the developer to
> be familar with Namespace at all. For instance, you can use a Namespace
> object when constructing an Element object, but you can also use raw
> strings. This is one of the few places in the API where there's no raw
> string alternative for the namespace.
> 
> I suggest that the two-string argument version of getAttributeValue()
> use the second string as a namespace URI and that we simply remove the
> default strings from getAttributeValue().
> 
> --
> +-----------------------+------------------------+-------------------+
> | Elliotte Rusty Harold | elharo at metalab.unc.edu | Writer/Programmer |
> +-----------------------+------------------------+-------------------+
> |           The XML Bible, 2nd Edition (IDG Books, 2001)             |
> |             http://www.cafeconleche.org/books/bible2/              |
> |   http://www.amazon.com/exec/obidos/ISBN=0764547607/cafeaulaitA/   |
> +----------------------------------+---------------------------------+
> |  Read Cafe au Lait for Java News:   http://www.cafeaulait.org/     |
> |  Read Cafe con Leche for XML News:  http://www.cafeconleche.org/   |
> +----------------------------------+---------------------------------+
> 
> _______________________________________________
> 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