了解JAX-WS中的@Oneway注释

JHa*_*ach 11 java jax-ws

根据javadoc:

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

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

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

Tom*_*icz 17

@Oneway意味着什么都不会逃避你的方法,既不回应也不例外.这有两个原因:

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

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

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

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