【问题标题】:Understanding @Oneway annotation in JAX-WS了解 JAX-WS 中的 @Oneway 注解
【发布时间】:2012-10-14 23:59:17
【问题描述】:

根据 javadoc:

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

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

问题:我最好自己将其线程化以获得真正的异步调用,并删除@Oneway 注释?

【问题讨论】:

    标签: java jax-ws


    【解决方案1】:

    @Oneway 意味着 nothing 永远不会逃脱您的方法,既不是响应也不是异常。这有两个原因:

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

    • 通常单向方法由 Web 服务框架异步执行(我知道 颂扬这一点)。框架会立即返回,因此您的客户可能甚至在开始处理单向方法之前就收到了空响应。当抛出异常时,原来的 HTTP 连接早就没有了。

    因此,如果您想传播异常或超时,请使用标准 SOAP 方法,响应为空*,并且显式声明的错误很少。如果你想在一段时间后让你的调用超时,你需要单独的线程池并阻塞等待响应或给定的时间段。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多