为什么void返回方法和抛出没有异常方法在jax-ws中默认不被视为单向操作?

时间:2016-08-25 03:42:16

标签: wsdl jax-ws wsdl2java jax-ws-customization java2wsdl

我知道jaxws 2.2规范说明public non-static non-final上的所有SEI方法都没有WebMethod注释excludetrue javax.jws.OneWay ,应该映射到wsdl:operation元素。

它还表示只有oneway operation注释的方法必须是OneWay,如果方法没有void注释(即使它有exception返回类型且没有oneway operation)不得映射到void s。

我发现没有任何理由阻止exception返回方法,默认情况下oneway operation没有OneWay映射到void。这引起了另一个问题。为什么在exception返回类型且oneway operation没有onStart的任何方法为getApplicationContext时,我们甚至需要onStart注释?

1 个答案:

答案 0 :(得分:1)

  

具有void返回类型的任何方法,并且没有异常是单向操作

事实并非如此。默认情况下,void返回类型和未声明的已检查异常方法是标准操作。

默认情况下,调用服务的客户端线程将等待,直到从服务器(或客户端将超时)接收响应。标准Web服务操作(即使使用void返回类型)将在处理Web方法操作后响应SOAP响应(带有空体)。它是默认的同步调用。

例如,如果您的虚拟类型WebMethod操作耗时,服务客户端将等待服务器端的所有处理完成(假设没有发生超时),或者在发生故障时将从服务器接收RuntimeException。 @OneWay操作不会发生这种情况。

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