code: private Object invokeTarget(Object target, Method method, Object[] args) throws Throwable {
          Object returnValue;
          try {
              returnValue = method.invoke(target, args);
          } catch(InvocationTargetException ite) {
              throw ite.getTargetException();
          }
          return returnValue;
      }
docs: Invoke the underlying method, catching any InvocationTargetException and rethrowing the target exception