java - 了解 JAX-WS 中的 @Oneway 注释

标签 java jax-ws

根据 javadoc:

Indicates that the given @WebMethod has only an input message and no output. Typically, a oneway method returns the thread of control to the calling application prior to executing the actual business method. A 181 processor should report an error if an operation marked @Oneway has a return value or Holder parameters, or declares any checked exceptions.

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

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

最佳答案

@Oneway 意味着没有会逃脱您的方法,无论是响应还是异常。这有两个原因:

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

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

因此,如果您想要传播异常或超时,请使用带有空响应* 和少量明确声明的故障的标准 SOAP 方法。如果您想在一段时间后使您的调用超时,您将需要单独的线程池和阻塞等待给定时间段内的响应。

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

关于java - 了解 JAX-WS 中的 @Oneway 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057794/

相关文章:

java - 在 C# 中从 Java 实现监听器

java - Spring依赖注入(inject)

java - 用于正则表达式验证的 JAX-WS @Pattern 注释

maven - 从 JDK 设置 javax.xml.ws.Service,而不是使用 maven 的 javaee-api

java - 需要将通过 jpa 获取的 uniqueresult 转换为 String 数组的解决方案

java - 多个 MongoDB 连接到多个 mongo 路由器 (mongos.exe)

java - 将 python 正则表达式转换为 java

java - 使用 JAX-WS Maven 插件 (wsimport) 检查 Web 服务中的异常层次结构

javax.xml.ws.Service 通过 SSL 使用 SOAP 服务

java - 无法找到命名空间的 NamespaceHandler [http ://www. springframework.org/schema/context]