Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 理解JAX-WS中的@Oneway注释_Java_Jax Ws_Apache Cxf - Fatal编程技术网

Java 理解JAX-WS中的@Oneway注释

Java 理解JAX-WS中的@Oneway注释,java,jax-ws,apache-cxf,Java,Jax Ws,Apache Cxf,根据javadoc: 指示给定的@WebMethod只有一条输入消息,没有输出。通常,单向方法在执行实际业务方法之前将控制线程返回给调用应用程序。如果标记为@Oneway的操作具有返回值或Holder参数,或声明任何已检查的异常,181处理器应报告错误 那么,我是否可以假设,如果我需要异常处理(选中或取消选中),则不建议使用此注释?我不会从业务逻辑返回任何信息,但是我仍然有兴趣知道超时和其他各种特定于调用SOAP方法的错误。这个注释是否意味着我无权访问HTTP返回代码或抛出的异常 问题:我最好自

根据javadoc:

指示给定的@WebMethod只有一条输入消息,没有输出。通常,单向方法在执行实际业务方法之前将控制线程返回给调用应用程序。如果标记为@Oneway的操作具有返回值或Holder参数,或声明任何已检查的异常,181处理器应报告错误

那么,我是否可以假设,如果我需要异常处理(选中或取消选中),则不建议使用此注释?我不会从业务逻辑返回任何信息,但是我仍然有兴趣知道超时和其他各种特定于调用SOAP方法的错误。这个注释是否意味着我无权访问HTTP返回代码或抛出的异常


问题:我最好自己解决这个问题,以获得一个真正的异步调用,并删除
@Oneway
注释?

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

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

  • 通常单向方法由web服务框架异步执行(我知道ODE)。框架会立即返回,因此您的客户可能在处理单向方法之前就收到了空响应。当抛出异常时,原始HTTP连接早就消失了

所以,如果您想传播异常或超时,请使用带有空响应*和显式声明的少量错误的标准SOAP方法。如果您想在一段时间后使调用超时,则需要单独的线程池,并在给定的时间段内阻塞等待响应

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