Question: I have the following code

```
try {
   xpathInstance = XPath.newInstance(xpathExpr);
       list = (Text) xpathInstance.selectSingleNode(doc);
} catch (JDOMException e) {
   throw new Exception(e);
}

```

I had forgotten to include a library that was a dependency of the jdom.jar library. When i run the application i saw this error. 

```
Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/NamespaceContext
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at org.jdom.xpath.XPath.newInstance(XPath.java:134)
at com.myapp.parser.GenericXMLParser.getSingleNodeValue(GenericXMLParser.java:63)

```

According to the JDOM documentation, the newInsance() method throws a JDOMEXCeption so shouldnt it have caught the error? 

Also, how can i avoid having to add a catch(Exception e) clause to avoid unknown exceptions. 

Thanks

Answer: 
> 
> I had forgotten to include a library
>  that was a dependency of the jdom.jar
>  library. When i run the application i
>  saw this error.
> 
> 
> 

The error that you saw in a runtime error thrown for a class that was expected to be in the **CLASSPATH** but was not found. If `jdom.jar` does indeed include `org/jaxen/NamespaceContext` class then that should fix this issue. 

> 
> According to the JDOM documentation,
>  the newInsance() method throws a
>  JDOMEXCeption so shouldnt it have
>  caught the error?
> 
> 
> 

No this is not a `JDOMException`, it's a `NoClassDefFoundError`, therefore it does not catch it. **Most importantly**, this happens before JDOM class is in the picture - happens during class loading.

> 
> Also, how can i avoid having to add a
>  catch(Exception e) clause to avoid
>  unknown exceptions
> 
> 
> 

In general you should **not** try to catch [NoClassDefFoundError](http://download.oracle.com/javase/6/docs/api/java/lang/NoClassDefFoundError.html) since it is a type of error that falls under the category of `failures from which recovery is not feasible`. You can try to work around it by using Reflection and catching `ClassNotFoundException` but as I said in general this is an exception you cannot recover from so attempts to catch it is probably a moot point.
It wasn't caught because it wasn't thrown. The exception thrown was a `java.lang.NoClassDefFoundError`

And if you want to catch an Exception, you have to catch it. There is nothing you can do to avoid this, that would kind of defeat the whole point of exceptions.