Java Exception Handling

From MPDLMediaWiki
Jump to navigation Jump to search

Problem description[edit]

Modules need dependencies of other modules only because of their exception classes[edit]

From validation/ItemValidating:

   String validateItemXml(final String itemXml) throws
           ValidationSchemaNotFoundException,
           TechnicalException;

From importmanager/ImportHandler:

   byte[] doFetch(String sourceName, String identifier) throws FileNotFoundException, 
           IdentifierNotRecognisedException, 
           SourceNotAvailableException, 
           TechnicalException,
           FormatNotRecognizedException;

Stacktraces are sometimes swallowed[edit]

   try 
   {
       ...					
   } 
   catch (MalformedURLException e) 
   {LOGGER.error("Error when replacing regex in fetching URL"); e.printStackTrace(); }
   catch(UnsupportedEncodingException e)
   {e.printStackTrace();}

   try 
   {
       ...					
   } 
   catch (JiBXException e) 
   {
       e.getCause();
   }

Sometimes, excessive stacktraces are shown, even without useful information[edit]

Example from coreservices: File:Exception1.txt

Logger.error, System.out and e.printStackTrace are mixed up happily[edit]

No distinction between exceptions and errors[edit]

Conclusion[edit]

Distinguish between errors and exceptions[edit]

Inside a module, always throw errors up as they are[edit]

When catching exceptions, log appropriately[edit]

Between modules, throw only generic exceptions (e.g. java.lang.Exception, java.lang.RuntimeException) without cause[edit]