CXF之JAX-WS Dispatch API
来源:互联网 发布:新海软件 薪资 编辑:程序博客网 时间:2024/04/26 14:05
JAX-WS Dispatch API
Dispatch对象有两个使用模型:
--消息模型
--负载模型
. 消息模型
在消息模型中,一个Dispatch对象要使用一个完整的消息。完整的消息包括头与包装器.
你为Despatch对象指定使用消息模型,当你创建Dispatch对象时,要提供java.xml.Service.Mode.MESSAGE值。
. 负载模型
在负载模型中,Dispatch对象仅使用消息负载(消息体body)。
你为Despatch对象指定使用负载模型,当你创建Dispatch对象时,要提供java.xml.ws.Service.Mode.PAYLOAD值.
2Data Types(数据类型)
Dispatch对象,因为它们是低级别的对象,使用相同的JAXB生成的高级别的消费者API是不被优化的。
Dispatch对象使用下面几个类型:
--javax.xml.transform.Source
--javax.xml.soap.SOAPMessage
--javax.activation.DataSource
--JAXB
. 使用Source对象
Dispatch对象能接收与返回派生自javax.xml.transform.Source接口的对象。 Source对象是保存xml文档的低级别对象。
每个Source实现提供方法,访问存储的xml文档并操纵它的内容。
下面的对象实现了Source接口:
--DOMSource
--SAXSource
--StreamSource
注意:当使用Source对象时,开发者要负责确保所有必须的且具体的绑定包装都添加到了消息上。
例如,当一个服务期待SOAP消息交互时,开发人员必须确保所需的SOAP信封添加到传出的请求
并且SOAP信封的内容是正确的。
. 使用SOAPMessage对象
当下面条件为真时,Dispatch对象能使用javax.xml.soap.SOAPMessage对象。
--Dispatch对象正使用SOAP binding.
--Dispatch对象正使用message mode(消息模型).
. 使用DataSource对象
Dispatch对象能使用实现了javax.activation.DataSource接口的对象,当下面条件为真时:
--Dispatch对象正使用HTTP binding.
--Dispatch对象正使用message mode(消息模型)
DataSource对象提供了一个可以用MIME类型数据的机制,可以来自URL,文件和字节数组。
. 使用JAXB对象
虽然Dispatch对象本意是低级别的API, 允许你使用原消息。他们也允许你使用JAXB对象。若要使用
JAXB对象,Dispatch对象必须通过JAXBContext, JAXBContext知道在使用中怎么编组和解组JAXB对象。
Dispatch对象被创建时通过JAXBContext。
JAXBContext理解你能通过JAXB对象作为invoke()方法的参数。你也能放返回消息进JAXB对象,JAXBContext
对象能理解。
3使用Dispatch对象
使用Dispatch对象调用一个远程服务,你要做以下几点:
--创建一个Dispatch对象
--构建一个请求消息
--调用合适的invoke()方法
--解析响应消息
. 创建一个Dispatch对象
创建一个Dispatch对象要做以下几步:
--创建一个Service对象,它代表wsdl:service元素定义的服务
--使用Service对象的createDispatch()方法创建Dispatch对象
public Dispatch<T> createDispatch(QName portName,java.lang.Class<T> type,Service.Mode mode)
throws WebServiceException;
如果你使用JAXB对象的createDispatch()方法的签名就是:
public Dispatch<T> createDispatch(QName portName,javax.xml.bind.JAXBContext context,Service.Mode mode)
throws WebServiceException;
下表描述createDispatch()方法的参数:
parameterdescription
partNamewsdl:port元素的指定的QName,它代表Dispatch对象调用上的服务提供者。
type指定Dispatch对象使用的指定对象的数据类型
mode指定Dispatch对象的消息使用模型。
下面代码是创建一个Dispatch对象并在消息负载模型下使用DOMSource对象:
. 构建请求消息(略)
. 同步调用
为消费者生成一个同步调用的响应,你使用Dispatch对象的invoke()方法。
T invoke(T msg) throws WebServiceException;
同步的例子:
. 异步调用
Dispatch对象支持异步调用. Dispatch对象可以使用轮询与回调两种方式处理异步。
当使用轮询方式的invokeAsync()方法时,返回一个Response<T>对象,可以定期轮询它,看看response是否返回。
Response<T> invokeAsync(T msg) throws WebServiceException;
当使用回调方式的invokeAsync()方法时,它接受一个AsyncHandler的实现,当response返回时处理它。
Future<?> invokeAsync(T msg,AsyncHandler<T> handler) throws WebServiceException;
. 单向调用(OneWay)
当一个请求不需要一个响应的时候,你的远程调用可以使用Dispatch对象上的invokeOneWay()方法。
void invokeOneWay(T msg) throws WebServiceException;
- CXF之JAX-WS Dispatch API
- CXF之JAX-WS Provider API
- CXF之JAX-WS
- WS (CXF) JAX-WS
- CXF系列之JAX-WS:输入输出参数
- CXF系列之JAX-WS:SOAP服务
- CXF JAX-WS 注释
- apache cxf之 一个简单的JAX-WS服务程序
- CXF系列之JAX-WS规范的java实现方式
- CXF系列之JAX-WS:基于SOAP的安全控制
- Apache CXF JAX-WS example
- JAX-WS之旅
- webService之JAX-WS
- requires JAX-WS 2.2 API
- JAX-WS 和 XFire 以及CXF比较
- WebService —— JAX-WS 与 CXF
- 简单的Jax-WS WebService实现-cxf
- 基于CXF的JAX-WS、JAX-RS(RESTful)的webService
- jms 消息分组 all or nothing ,要么全接收 ,要么不接收
- 一致性哈希算法以及其PHP实现
- Web移动应用的未来:使用HTML5和CSS
- jms 事务
- smartFoxServer总结0001---聊天室连接步骤
- CXF之JAX-WS Dispatch API
- jms ExceptionListener
- Perl脚本的调试方法
- RFC2965规定的cookie实现最小支持
- CStdioFile 类在 UNICODE 工程中WriteString 中文失败的原因(转)
- 常用脚本汇总
- OSI[七层]与TCP/IP[四层]模型简述简图
- oracle分区表
- HTML文档中小meta的大作用