在JAX-WS中抛出自定义异常

时间:2010-09-20 15:53:49

标签: java jax-ws

我有一个带有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();
一切正常。

有没有人知道可能导致这种奇怪行为的原因?

2 个答案:

答案 0 :(得分:1)

您是否已将例外映射到故障?见JAX-WS - Map Exceptions to faults

答案 1 :(得分:-1)

也许只是建立一条告诉“权限被拒绝”的消息会更简单,或类似的东西。在我看来,Web服务永远不应该抛出异常,它应该总是返回响应。