使用wsdl2java生成具有PROPER异步支持的存根

时间:2011-05-06 11:20:05

标签: java asynchronous service cxf wsdl2java

假设我只使用一种方法提供服务:int generateRandomNumbers()

是否可以使用wsdl2java生成具有适当异步支持的存根?

例如,生成的类应具有以下方法/消息:

int generateRandomNumbers()
int generateRandomNumbers_Async(callback)

我知道如何使用wsdl2java生成带有异步消息的存根。 但是,这仅在服务理解异步消息时才有效。

我的意思是适当的异步支持是

  • generateRandomNumbers_Async不是新消息,因为该服务只能理解generateRandomNumbers,而不是generateRandomNumbers_Async
  • generateRandomNumbers_Async =在另一个线程中调用generateRandomNumbers,并在幕后完成generateRandomNumbers时调用回调。

有什么想法吗?

其他Web服务框架如何?

2 个答案:

答案 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>