Я использую библиотеку повторных попыток Spring, чтобы повторить вызов веб-службы в случае возникновения какой-либо ошибки, если служба не работает или истекло время ожидания сети. Однако в моем коде постоянно появляется ошибка, указанная ниже - Incorrect number of arguments for type RetryCallback<T,E>; it cannot be parameterized with arguments <Object>. Метод, в котором я реализую логику, возвращает void, поэтому я в принципе не могу вернуть что-либо при повторном вызове. Посоветуйте, пожалуйста, какую ошибку я здесь сделал -

 RetryTemplate retryTemplate = createRetryTemplate(3, 1000);
    return retryTemplate.execute(new RetryCallback<Object>() {
        @Override
        public Object doWithRetry(RetryContext context) throws Exception {
            userUpdateService.updateUser(userName, userID);
        }
    });
1
rickygrimes 26 Фев 2015 в 07:18

3 ответа

Лучший ответ

RetryCallback запрашивает два типа параметр, тип возвращаемого значения и тип исключения.

RetryTemplate retryTemplate = createRetryTemplate(3, 1000);
    return retryTemplate.execute(new RetryCallback<Object,Exception>() {
       @Override
       public Object doWithRetry(RetryContext context) throws Exception {
           userUpdateService.updateUser(userName, userID);
       }
    });
3
Dongqing 26 Фев 2015 в 04:27

Тип {{X0 }} принимает два общих параметра (тип возвращаемого значения и тип созданного исключения), но вы передаете только один.

public interface RetryCallback<T, E extends Throwable> {
    T  doWithRetry(RetryContext context) throws E;
}

Итак, вы хотели бы создать его так:

new RetryCallback<Object, Throwable>() { //...
1
gknicker 26 Фев 2015 в 04:28

документация для RetryCallback указывает 2 типа, из которых вы указали только один.

Второй тип - это то, какую производную от Throwable вы (возможно) выберете, например Exception, которую вам также необходимо указать:

RetryTemplate retryTemplate = createRetryTemplate(3, 1000);
return retryTemplate.execute(new RetryCallback<Object, Exception>() {
    @Override
    public Object doWithRetry(RetryContext context) throws Exception {
        userUpdateService.updateUser(userName, userID);
    }
});  
1
acanby 26 Фев 2015 в 04:26