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

前端之家收集整理的这篇文章主要介绍了java – 了解JAX-WS中的@Oneway注释前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
根据 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 fault),因此它不能从单向方法返回(不能返回任何东西)
>通常单向方法由Web服务框架异步执行(我知道apache-cxf odes).该框架立即返回,因此即使开始处理单向方法,您的客户也可能收到空答复.当抛出异常时,原来的HTTP连接已经过去了.

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

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

猜你在找的Java相关文章