Class ExceptionUtil


  • public class ExceptionUtil
    extends Object
    Author:
    Roman Smirnov, Askar Akhmerov
    • Constructor Detail

      • ExceptionUtil

        public ExceptionUtil()
    • Method Detail

      • getExceptionStacktrace

        public static String getExceptionStacktrace​(Throwable exception)
      • createExceptionByteArray

        public static ByteArrayEntity createExceptionByteArray​(String name,
                                                               byte[] byteArray,
                                                               ResourceType type)
        create ByteArrayEntity with specified name and payload and make sure it's persisted used in Jobs and ExternalTasks
        Parameters:
        name - - type\source of the exception
        byteArray - - payload of the exception
        type - - resource type of the exception
        Returns:
        persisted entity
      • getPersistenceCauseException

        protected static Throwable getPersistenceCauseException​(org.apache.ibatis.exceptions.PersistenceException persistenceException)
      • unwrapException

        public static SQLException unwrapException​(org.apache.ibatis.exceptions.PersistenceException persistenceException)
      • checkValueTooLongException

        public static boolean checkValueTooLongException​(SQLException sqlException)
      • checkValueTooLongException

        public static boolean checkValueTooLongException​(ProcessEngineException genericPersistenceException)
      • checkConstraintViolationException

        public static boolean checkConstraintViolationException​(ProcessEngineException genericPersistenceException)
      • checkForeignKeyConstraintViolation

        public static boolean checkForeignKeyConstraintViolation​(org.apache.ibatis.exceptions.PersistenceException persistenceException,
                                                                 boolean skipPostgres)
      • checkForeignKeyConstraintViolation

        public static boolean checkForeignKeyConstraintViolation​(SQLException sqlException,
                                                                 boolean skipPostgres)
      • checkVariableIntegrityViolation

        public static boolean checkVariableIntegrityViolation​(org.apache.ibatis.exceptions.PersistenceException persistenceException)
      • checkCrdbTransactionRetryException

        public static boolean checkCrdbTransactionRetryException​(Throwable exception)
      • checkCrdbTransactionRetryException

        public static boolean checkCrdbTransactionRetryException​(SQLException sqlException)
      • checkDeadlockException

        public static boolean checkDeadlockException​(SQLException sqlException)
      • findBatchExecutorException

        public static org.apache.ibatis.executor.BatchExecutorException findBatchExecutorException​(org.apache.ibatis.exceptions.PersistenceException exception)
      • doWithExceptionWrapper

        public static <T> T doWithExceptionWrapper​(Supplier<T> supplier)
        Pass logic, which directly calls MyBatis API. In case a MyBatis exception is thrown, it is wrapped into a ProcessEngineException and never propagated directly to an Engine API call. In some cases, the top-level exception and its message are shown as a response body in the REST API. Wrapping all MyBatis API calls in our codebase makes sure that the top-level exception is always a ProcessEngineException with a generic message. Like this, SQL details are never disclosed to potential attackers.
        Type Parameters:
        T - is the type of the return value
        Parameters:
        supplier - which calls MyBatis API
        Returns:
        the value returned by the supplier
        Throws:
        ProcessEngineException - which wraps the actual exception