了解JAX-WS中的@Oneway注释

时间:2012-10-24 21:10:01

标签: java jax-ws

根据javadoc:

  

表示给定的@WebMethod只有输入消息而没有输出。通常,单向方法在执行实际业务方法之前将控制线程返回给调用应用程序。如果标记为@Oneway的操作具有返回值或Holder参数,则181处理器应报告错误,或声明任何已检查的异常。

那么我可以假设,如果我需要异常处理(选中或取消选中),建议不要使用此注释吗?我没有从业务逻辑中返回任何内容,但是我仍然有兴趣了解超时和其他各种特定于调用SOAP方法的错误。这个注释是否意味着我无权访问HTTP返回码或抛出异常?

问题:我最好自行解决这个问题,以获得真正的异步调用,并删除@Oneway注释?

1 个答案:

答案 0 :(得分:17)

@Oneway表示没有将逃脱您的方法,既不响应也不例外。这有两个原因:

  • 技术上异常只是另一种类型的响应(SOAP错误),因此无法从单向方法返回(不能返回任何内容)

  • 通常单向方法由Web服务框架异步执行(我知道颂歌)。框架立即返回,因此即使在单向方法处理开始之前,您的客户也可能收到空响应。抛出异常时,原来的HTTP连接早已不复存在。

因此,如果要传播异常或超时,请使用带有空响应 * 的标准SOAP方法,并显式声明几个故障。如果你想在一段时间后超时你的电话,你需要单独的线程池和阻止等待一段时间的响应。

* 请不要将空的SOAP响应(没有内容的XML文档,只是根标记,包装在SOAP信封中)与空HTTP响应混淆(没有是送回)。请记住,SOAP不仅限于HTTP。例如,如果您使用JMS或电子邮件传输,则普通双向功能的空响应(或故障)是从服务器发送到客户端的另一条消息。单向方法只是一个最重要的消息而没有被发回。