我有一个带有Web方法的JAX-WS Web服务可能会引发异常。
@WebMethod
public Folder getTree() throws UnauthorizedException {
//...
// Get authorization data..
//...
if (!authorized) {
throw new UnauthorizedException();
}
//...
}
如果用户被授权,它可以正常工作,但是当抛出异常时,它不会生成带有错误的SOAP消息,它只会崩溃Web服务
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
我觉得我想念一些简单的事情
编辑只有在Web方法开始后不久抛出异常的情况下,才会出现问题。在抛出异常之前引入延迟时,例如
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
throw new UnauthorizedException();
一切正常。
有没有人知道可能导致这种奇怪行为的原因?
答案 0 :(得分:1)
您是否已将例外映射到故障?见JAX-WS - Map Exceptions to faults
答案 1 :(得分:-1)
也许只是建立一条告诉“权限被拒绝”的消息会更简单,或类似的东西。在我看来,Web服务永远不应该抛出异常,它应该总是返回响应。