У меня есть веб-сервис 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();
, все работает отлично.
Кто-нибудь знает, что может вызвать такое странное поведение?