为什么 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 operation
s.
我找不到任何理由来阻止 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 方法操作,而是会立即继续。
我知道 jaxws 2.2
规范说 SEI
上的所有 public non-static non-final
方法没有 WebMethod
注释 exclude
作为 true
, 应映射到 wsdl:operation 个元素。
它还说只有用javax.jws.OneWay
注释的方法必须是oneway operation
,如果该方法没有OneWay
注释(即使它有void
return 类型且没有 exception
) 不得映射到 oneway operation
s.
我找不到任何理由来阻止 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 方法操作,而是会立即继续。