Обработка пользовательских исключений с помощью GWT - PullRequest
1 голос
/ 13 декабря 2011

Я пытаюсь создать код, который будет ловить PhoneNumberInUseException, который выбрасывается ServiceImpl, однако приведенный ниже код всегда идет для оператора else.

@Override
            public void onFailure(Throwable caught) {
                Window.alert("Failed create account.");
                if (caught instanceof PhoneNumberInUseException) {
                    Window.alert("Sorry, but the phone number is already used.");
                } else {
                    Window.alert(caught.toString());
                }

            }

PhoneNumberInUseException extends RuntimeException

Сейчас я просто показываю это через Window.alert, однако я буду выполнять логику на стороне клиента для обработки исключения, поэтому я не могу просто использовать IllegalArgumentException, который работает простохорошая передача строки исключения с сервера на клиент.

Я что-то упустил?

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011

Если ваш PhoneNumberInUseException класс выглядит примерно так:

public class PhoneNumberInUseException extends RuntimeException {

    public PhoneNumberInUseException() {
        super();
    }
}

, и вы добавляете его в сервис, как это:

throw new PhoneNumberInUseException();

, тогда ваш код должен срабатыватьправильно.Это, конечно, при условии, что ваша служба объявила, что она выдает PhoneNumberInUseException, например:

public interface SomeService extends RemoteService {
    void doSomething(Object someObject) throws PhoneNumberInUseException;
}

public interface SomeServiceAsync {
    void doSomething(Object someObject, AsyncCallback callback);
}

public class SomeServiceImpl extends RemoteServiceServlet implements SomService {
    public void doSomething(Object someObject) throws PhoneNumberInUseException {
        if(somethingHappened) {
            throw new PhoneNumberInUseException();
        } else {
            doSomethingCool();
        }
    }
}

Если после того, как вы убедились, что все должно работать правильно, выВозможно, вы захотите поставить точку останова на линии

if (caught instanceof PhoneNumberInUseException)

и выяснить, что такое класс caught.Если это , а не PhoneNumberInUseException, вы, вероятно, не прочитали документацию очень хорошо.

0 голосов
/ 13 декабря 2011

Мне пришлось расширить PhoneNumnberInUseException с IllegalArgumentException вместо Exception и сделать его Serializable, хотя я не знаю, правильный ли это подход:

public class PhoneNumnberInUseException extends IllegalArgumentException implements Serializable{
    public PhoneNumnberInUseException(){
        super();
    }
    public PhoneNumnberInUseException(String msg) {
        super(msg);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...