Создание пользовательских исключений в JAX-WS - PullRequest
3 голосов
/ 20 сентября 2010

У меня есть веб-сервис JAX-WS с веб-методом, который может вызвать исключение.

@WebMethod
public Folder getTree() throws UnauthorizedException {
    //...
    // Get authorization data..
    //...
    if (!authorized) {
        throw new UnauthorizedException();
    }
    //...
}

Работает нормально, если пользователь авторизован, но когда выдается исключение, он не генерирует SOAP-сообщение с ошибкой, он просто завершает работу веб-службы с

SEVERE: Unauthorized
    ru.cos.xdoc.storage.UnauthorizedException: Unauthorized
    at ru.cos.xdoc.storage.Storage.getTree(Storage.java:136)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    ...

и закрывает соединение

HTTP/1.1 500 Internal Server Error
X-Powered-By: Servlet/2.5
Server: Sun GlassFish Enterprise Server v2.1.1
Content-Type: text/xml;charset="utf-8"
Transfer-Encoding: chunked
Date: Mon, 20 Sep 2010 15:43:59 GMT
Connection: close  

Мне кажется, что я упускаю что-то простое

EDIT Проблема, как оказалось, возникает только в том случае, если исключение выдается вскоре посленачало веб-метода.Когда вводится задержка перед выдачей исключения, например

try {
    Thread.sleep(3000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

throw new UnauthorizedException();

, все работает отлично.

Кто-нибудь знает, что может вызвать такое странное поведение?

Ответы [ 2 ]

1 голос
/ 20 сентября 2010

Вы сопоставили свое исключение с неисправностью?См. JAX-WS - Карта исключений для ошибок

0 голосов
/ 20 сентября 2010

возможно, было бы проще просто создать сообщение с сообщением "Отказано в доступе" или что-то в этом роде. По моему мнению, веб-сервис никогда не должен выдавать исключение, он всегда должен возвращать ответ.

...