假设我只使用一种方法提供服务:int generateRandomNumbers()
。
是否可以使用wsdl2java生成具有适当异步支持的存根?
例如,生成的类应具有以下方法/消息:
int generateRandomNumbers()
int generateRandomNumbers_Async(callback)
我知道如何使用wsdl2java生成带有异步消息的存根。 但是,这仅在服务理解异步消息时才有效。
我的意思是适当的异步支持是
generateRandomNumbers_Async
不是新消息,因为该服务只能理解generateRandomNumbers
,而不是generateRandomNumbers_Async
generateRandomNumbers_Async
=在另一个线程中调用generateRandomNumbers
,并在幕后完成generateRandomNumbers
时调用回调。有什么想法吗?
其他Web服务框架如何?
答案 0 :(得分:1)
使用CXF时,它应该像你的“第二”子弹一样工作。 “generateRandomNumbers”消息在调用线程上发送,因此如果存在IO错误或类似错误,将立即返回。 (根据jaxws规范)然后后台线程将处理响应并调用回调。
使用wsdl2java生成代码时,您需要创建一个包含以下内容的jaxws绑定文件:
<bindings
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
wsdlLocation="hello_world_async.wsdl"
xmlns="http://java.sun.com/xml/ns/jaxws">
<bindings node="wsdl:definitions">
<enableAsyncMapping>true</enableAsyncMapping>
</bindings>
</bindings>
并使用-B标志传递它。这将在异步版本的接口上生成一堆新方法。你应该只需要使用它们。
答案 1 :(得分:0)
只是配置服务器的信息。 Annotation @UseAsyncMethod将触发异步方法而不是同步方法。 一定要使用Servlet 3.0等。 在web.xml中使用true配置servlet:
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<!-- Enable asynchronous requests -->
<async-supported>true</async-supported>
</servlet>