Custom Exception that wraps Multiple Exceptions : Encouraged or Not?

ndnine89 picture ndnine89 · Apr 9, 2015 · Viewed 10.8k times · Source

I am coding a Java Library that will be used to access a DB. I am throwing the exceptions to the end-programmer who uses the JAR library to handle it the way he/she wants.

I wrote a custom Exception (provided below) to wrap connection specific exceptions together so the end-programmer will not have to catch all these exceptions in his code. (to make it easy for him)

is this a good practice when it comes to coding Java libraries? By using this the user will only have to catch NConnectionException in his code.

public class NConnectionException extends Exception {
private static final Logger logger = LoggerFactory.getLogger(NConnectionException.class);
public NConnectionException(Exception e) {

    if (e instanceof NullPointerException) {
        logger.error("ERROR IN READING DF");
        e.printStackTrace();
    }

    else if (e instanceof FileNotFoundException) {
        logger.error("FILE NOT FOUND");
        e.printStackTrace();

    } else if (e instanceof ParserConfigurationException)
    {
        logger.error("PARSE CONF ERR");
        e.printStackTrace();

    }
    else if (e instanceof org.xml.sax.SAXException)
    {
        logger.error("SAX ERR");
        e.printStackTrace();

    }
    else if (e instanceof IOException)
    {
        logger.error("IO ERR");
        e.printStackTrace();

    }

}

}

Answer

Rene8888 picture Rene8888 · Apr 9, 2015

You can pass a cause (Throwable) to a custom exception. Look at the Exception javadoc for more Information.

Edit:

public class CustomException extends Exception {
    public CustomException(Throwable t) {
        super(t);
    }
}

public void testMethod(String s) throws CustomException {
   try {
       int integer = Integer.parseInt(s);
   } catch (NumberFormatException e) {
       throw new CustomException(e);
   }
}

try {
    testMethod("not a number");
} catch (CustomException ce) {
    ce.printStackTrace(); // this will print that a CustomException
                          // with the cause NumberFormatException has occured.
    ce.getCause(); // this will return the cause that
                   // we set in the catch clause in the method testMethod
}