luni, 2 martie 2015

[OmniFaces utilities (2.1/2.0)] Check if an exception or one of its nested causes is an instance of the given type


[OmniFaces utilities] The is() method returns true if the given exception or one of its nested causes is an instance of the given type.

Method:

OmniFaces 2.1 implementation:

OmniFaces 2.0 implementation:
Usage:

Example 1 - this is copy-pasted from OmniFaces documentation (check if the ConstraintViolationException is the cause of PersistenceException)

try{
   ... 
   } catch (PersistenceException e) {
     // Check if the caught exception has a ConstraintViolationException in its hierarchy.
     if (Exceptions.is(e, ConstraintViolationException.class)) {   
         // ...
     }
   }

Example 2 - distinguish between NullPointerException and IllegalArgumentException

try {
    //... code that may produce other exceptions than NullPointerException and IllegalArgumentException

    // if the 'myform' component is not found then next line will throw a NullPointerException
    UIForm myform = (UIForm) Faces.getViewRoot().findComponent("myForm");
    // if the 'myform' component contains children then next line will throw an IllegalArgumentException
    Components.validateHasNoChildren(myform);

    //... more code that may produce other exceptions than NullPointerException and IllegalArgumentException
    } catch (Exception e) {
      if (Exceptions.is(e, java.lang.NullPointerException.class)) {
          LOG.info("The form 'myFrom' cannot be found !");
      } else if (Exceptions.is(e, java.lang.IllegalArgumentException.class)) {
          LOG.log(Level.INFO, "]" + "The form ''myFrom'' was found, but it has childrens ! [{0}", e.getMessage());
      }
    }

Example 3 - in a custom exception handler for conditional navigation
...
Throwable throwable = exceptionQueuedEventContext.getException();
FacesContext facesContext = FacesContext.getCurrentInstance();
NavigationHandler nav = facesContext.getApplication().getNavigationHandler();

if (Exceptions.is(throwable, javax.faces.convert.ConverterException.class)) {
    //redirect to converters error page, converter.xhtml                                       
    nav.handleNavigation(facesContext, null, "/converter");
}

if (Exceptions.is(throwable, javax.faces.validator.ValidatorException.class)) {
    //redirect to validators error page, validator.xhtml
    nav.handleNavigation(facesContext, null, "/validator");
}

facesContext.renderResponse();
...

Obviously, you may found many useful examples for this method.

Niciun comentariu:

Trimiteți un comentariu