无法在java中捕获自定义异常

时间:2016-06-03 08:04:00

标签: java exception jdbctemplate spring-transactions

在我的资源方法中,我将获得以下异常

@Override
    public Response registerByDebitCard(RegistrationRequest registrationRequest,BeanFilter beanFilter) {
        try {


            RegistrationResponse registrationResponse = registrationService.doRegister(registrationRequest, beanFilter);

            return Response.ok(registrationResponse).build();
        } catch (CannotCreateTransactionException e) {
            LOGGER.error("Error Message is :: {}", e.getMessage());
            throw new RegistrationFailureException("MPYR0012", "Due to database technical problem signup failed");
        }
    }

如果我抓住上述异常就行了。 我尝试使用我无法捕获的自定义异常类来捕获此异常.Below是我的自定义异常类。

public class TransactionManagerDBException extends CannotCreateTransactionException {

    /**
     * @param msg
     */
    public TransactionManagerDBException(String msg) {
        super(msg);

    }

    public TransactionManagerDBException(String msg, Throwable cause) {
        super(msg, cause);

    }

}

我的资源方法:

@Override
        public Response registerByDebitCard(RegistrationRequest registrationRequest,BeanFilter beanFilter) {
            try {


                RegistrationResponse registrationResponse = registrationService.doRegister(registrationRequest, beanFilter);

                return Response.ok(registrationResponse).build();
            } catch (TransactionManagerDBException e) {
                LOGGER.error("Error Message is :: {}", e.getMessage());
                throw new RegistrationFailureException("MPYR0012", "Due to database technical problem signup failed");
            }
        }

现在我无法捕捉到这个异常。我的异常处理中有什么问题。请解释我的方法有什么问题

任何帮助将不胜感激!!!!

1 个答案:

答案 0 :(得分:0)

您的TransactionManagerDBException IS-A CannotCreateTransactionException。但事实恰恰相反。如果您的registrationService确实抛出CannotCreateTransactionException,那么它不是TransactionManagerDBException

如果您无法更改doRegister方法以抛出TransactionManagerDBException,则只能使用CannotCreateTransactionException使用catch块。