CXF之从wsdl first开始的异步调用

来源:互联网 发布:bp3000xe 端口设置 编辑:程序博客网 时间:2024/04/28 21:00

 

web服务的异步模型

 

除了普通的同步调用方式,CXF也支持两种异步的调用方式:

 

.  Polling approach(轮询):

这种情况下调用远程方法,返回一个javax.xml.ws.Response实例。这个Response对象继承自javax.util.concurrency.Future接口,

它被轮询,检查响应消息是否已经到达。

 

.  Callback approach(回调):

在这种情况下调用一个远程方法,你调用一个特殊的方法,它以一个回调对象作为其参数之一。(是javax.xml.ws.AsyncHandler类型).

每当响应消息到达客户端时,CXF运行AsyncHandler对象上的回调方法并给它响应消息的内容。

 

 

 

生成异步存根代码

在这里,定制用来切换异步调用功能。使用绑定声明来指定定制, 定义使用jaxws:bindings标签(jaxws前缀是绑在

http://java.sun.com/xml/ns/jaxws命名空间). 这里有指定绑定声明的两个可选的方法:

.  外部绑定声明:jaxws:bindings元素被定义在wsdl合约文件之外的单独文件中。当你使用wsdl2java生成存根代码时,

你指定绑定声明文件的地址

.  嵌入式的绑定声明:你也能直接嵌入jaxws:bindings元素在wsdl合约中,像wsdl扩展一样处理它。即然这样,

jaxws:bindings设置仅应用到当前的父元素。

 

这里我们只考虑第一点(外部绑定声明),下面是一个对于异步调用的外部绑定声明文件的模板. 如例:

 

 

 

例如,如果你仅仅想为GreeterAsync端口类型生成异步方法,你可以在指定的绑定声明中指定

<bindings node="wsdl:definitions/wsdl:portType[@name='GreeterAsync']">

假设这个绑定声明被保存在一个文件中,async_binding.xml。通过下面的wsdl2java命令,你能生成异步支持的必须的存根文件。

命令  :  wsdl2java   -client    -d    ClientDir   -b    async_binding.xml     hello_world.wsdl

当你运行wsdl2java命令的时候,你指定绑定声明文件的地址使用 -b 选项。

 

原创粉丝点击