为什么 void return 方法和 throws no exception 方法在 jax-ws 中默认不被视为单向操作?

why void return method and throws no exception methods are not considered as one way operation by default in jax-ws?

我知道 jaxws 2.2 规范说 SEI 上的所有 public non-static non-final 方法没有 WebMethod 注释 exclude 作为 true, 应映射到 wsdl:operation 个元素。

它还说只有用javax.jws.OneWay注释的方法必须是oneway operation,如果该方法没有OneWay注释(即使它有void return 类型且没有 exception) 不得映射到 oneway operations.

我找不到任何理由来阻止 void returning 没有 exception 默认映射到 oneway operation 的方法。这就产生了另一个问题。当任何具有 void return 类型且没有 exception 的方法是 oneway operation 时,为什么我们甚至需要 OneWay 注释?

any method with void return type and no exception is oneway operation

这不是真的。默认情况下,void return 类型和未声明的已检查异常方法是标准操作。

默认情况下,调用服务的客户端线程将等待直到收到来自服务器的响应(否则客户端将超时)。标准的 web 服务操作,即使是 void return 类型,也会在处理 web 方法操作后以 SOAP 响应(空主体)进行响应。默认是同步调用。

例如,如果你有void类型的WebMethod,操作比较耗时,服务客户端会一直等到服务器端的所有处理完成(假设没有超时),或者在出现错误时从服务器接收RuntimeException。 @OneWay 操作不会发生这种情况。

对于@OneWay 方法,它们是异步调用的,因此客户端线程不会等待完成服务器 Web 方法操作,而是会立即继续。