PhoneNumberInUseException

PhoneNumberInUseException

我正在尝试制作将捕获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的原因,它可以很好地将异常字符串从服务器传递到客户端。

我想念什么吗?

最佳答案

如果您的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,则可能不是read the documentation很好。

10-02 00:48