[jdom-interest] JDOM2 and Runtime Exceptions

Michael Kay mike at saxonica.com
Wed Jan 18 01:12:23 PST 2012

On 18/01/2012 03:31, Rolf Lear wrote:
> Hi all.
> Recent discussions have highlighted the area of how JDOM handles some 
> exceptions. In particular the context was XPath expressions. JDOM 
> specifies (and 'always' has specified) that XPath throws JDOMException 
> in the event of a failure on XPath. This has been 'questioned' from 
> the perspective that this would not be the fault of JDOM if the XPath 
> expression failed to compile, or evaluate.
If A calls B, and B calls C, and C fails, I think it's very much an open 
question whether B should attempt to translate/interpret any errors 
coming from C before passing them back to A. To some extent it depends 
on the level of transparency - if it's obvious to A that the request 
will involve a call on C, then perhaps passing back C's exception 
unchanged is reasonable. But if B wants to encapsulate C, and have 
flexibility to choose different service suppliers (e.g. to call D 
instead of calling C), then it's tough on A to pass back an exception 
from a component it didn't know was involved. Might JDOM ever choose to 
invoke a different XPath provider, or to include its own XPath engine? 
For example, one that supports XPath 2.0? In that case, exposing 
third-party exceptions would be an embarrassment.
> Exceptions that are outside the control of the programmer, like 
> IOException, should be thrown and caught, but an illegal XPath is more 
> of a bug/programming error than an Exception, and hence should be 
> treated more like a NullPointerException, IllegalArgumentException, 
> IndexOutOfBoundsException, etc.
Again this is an open question. URISyntaxException is very similar to a 
compile-time XPath exception in this regard, and that is a checked 
exception (and yes, it can be a pain). On the other hand 
PatternSyntaxException is unchecked. There's no logical reason to make 
them different.

I'm one of those who believes that the discipline and extra effort 
caused by having to think about exceptions makes for better engineered 
and more robust programs. I hate C# from this perspective; you never 
know whether you have tested the exception handling code in your 
application adequately. Similarly StAX is a mess from the exception 
handling point of view - Sax, where every method can throw SAXException, 
is much easier to work with.

> Would love some thoughts on this....
I don't think you'll please everyone here, but even without the 
compatibility implications, I'm not convinced that moving to unchecked 
exceptions would be an improvement.

More information about the jdom-interest mailing list