Provider API
1
Messaging Modes(消息模型)
继承了Provider接口的对象可以使用两个消息模型:
--消息模型
--消息负载模型
. 消息模型
当使用消息模型时,Provider的实现使用完整的消息。完整的消息包含任意绑定,header,包装。
你指定Provider的实现使用消息模型,它的值是java.xml.ws.Service.Mode.MESSAGE,它由javax.xml.ws.ServiceMode注解提供.
@WebServiceProvider
@ServiceMode(value=Service.Mode.MESSAGE)
public class stockQuoteProvider implements Provider<SOAPMessage>{.............................}
消息负载模型
在消息负载模型下,Provider实现使用消息负载,如例,Provider实现仅使用SOAP消息的body部分。
@WebServiceProvider
@ServiceMode(value=Service.Mode.PAYLOAD)
public class stockQuoteProvider implements Provider<DOMSource>{.......................}
如果你不提供@ServiceMode注解,Provider实现将默认使用消息负载(PAYLOAD)模型。
2
数据类型(Data Types)
. 概述
Provider实现,因为他们是低级别的对象,不能使用由相同JAXB生成的高级别的消费者API类型。Provider实现使用下列类型:
--javax.xml.transform.Source
--javax.xml.soap.SOAPMessage
--javax.activetion.DataSource
. 使用Source对象
Provider实现能接受与返回从javax.xml.transform.Source接口派生的对象。Source对象是低级别的拥有xml文档的对象。
每个Source实现类提供方法访问存储的xml文档并操纵它的内容。下面的对象实现了Source接口:
--DOMSource容纳一个DOM树的xml消息。xml消息存储在Mode对象集中,并能通过getNode()方法访问它们。节点能
使用setNode()方法被添加或增加到DOM树。
--SAXSource容纳一个SAX对象的xml消息。SAX对象包含一个InputSource对象,它包含原数据和解析原数据的XMLReader对象。
--StreamSource容纳一个数据流的xml消息。这个数据流能像其它任何数据流一样操作。
注意:当使用Source对象的时候,开发人员负责确保所有必须的绑定具体包装被添加到消息上。
. 使用SOAPMessage对象
Provider实现能使用javax.xml.soap.SOAPMessage对象,当下面条件为真时:
--Provider实现正使用SOAP绑定。
--Provider实现正使用消息模型。
SOAPMessage对象,顾名思义,拥有一个SOAP消息。他包含一个SOAPPart对象和零到多个AttachmentPart对象。
SOAPPart对象包含SOAP的具体部分,包含:soap信封,soap头和soap消息主体。AttachmentPart对象包含作为附件
通过的二进制数据。
. 使用DataSource对象
Provider实现能使用实现了javax.activation.DataSource接口的对象,当下面条件为真时:
--这实现类正使用HTTP 绑定。
--这实现类正在消息模型。
DataSource对象提供了一个使用MIME类型数据的机制,它来源于URLs,files,字节数组。
3
实现Provider对象
Provider接口是比较容易实现的。它仅有一个方法,invoke(),它必须被实现,它还有三个简单的要求:
--必须有@WebServiceProvider注解。
--必须有默认的public构造函数
--必须实现Provider接口的类型版本。换而言之,你不能实现Provider<T>接口。你必须实现使用一个具体数据类型
的接口的版本。如例,你能实现Provider<SAXSource>接口。
. working with messages
与高级别的SEI服务实现不同,Provider实现接受原xml数据的请求和发送必须的原xml数据响应。
. 实现invoke()方法
import javax.xml.ws.Provider;
import javax.xml.ws.Service;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceProvider;
@WebServiceProvider(portName="stockQuoteReporterPort" serviceName="stockQuoteReporter")
@ServiceMode(value="Service.Mode.MESSAGE")
public class stockQuoteReporterProvider implements Provider<SOAPMessage>
{
public stockQuoteReporterProvider()
{
}
public SOAPMessage invoke(SOAPMessage request)
{
SOAPBody requestBody = request.getSOAPBody();
if(requestBody.getElementName.getLocalName.equals("getStockPrice"))
{
MessageFactory mf = MessageFactory.newInstance();
SOAPFactory sf = SOAPFactory.newInstance();
SOAPMessage response = mf.createMessage();
SOAPBody respBody = response.getSOAPBody();
Name bodyName = sf.createName("getStockPriceResponse");
respBody.addBodyElement(bodyName);
SOAPElement respContent = respBody.addChildElement("price");
respContent.setValue("123.00");
response.saveChanges();
return response;
}
...
}
}
下面这个例子,Provider实现在负载模型下使用DOMSource对象。
import javax.xml.ws.Provider;
import javax.xml.ws.Service;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceProvider;
@WebServiceProvider(portName="stockQuoteReporterPort" serviceName="stockQuoteReporter")
@ServiceMode(value="Service.Mode.PAYLOAD")
public class stockQuoteReporterProvider implements Provider<DOMSource>
public stockQuoteReporterProvider()
{
}
public DOMSource invoke(DOMSource request)
{
DOMSource response = new DOMSource();
...
return response;
}
}
JAX-WS Dispatch API
Dispatch对象有两个使用模型:
--消息模型
--负载模型
. 消息模型
在消息模型中,一个Dispatch对象要使用一个完整的消息。完整的消息包括头与包装器.
你为Despatch对象指定使用消息模型,当你创建Dispatch对象时,要提供java.xml.Service.Mode.MESSAGE值。
. 负载模型
在负载模型中,Dispatch对象仅使用消息负载(消息体body)。
你为Despatch对象指定使用负载模型,当你创建Dispatch对象时,要提供java.xml.ws.Service.Mode.PAYLOAD值.
2
Data 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()方法的参数:
parameter
description
partName
wsdl:port元素的指定的QName,它代表Dispatch对象调用上的服务提供者。
type
指定Dispatch对象使用的指定对象的数据类型
mode
指定Dispatch对象的消息使用模型。
下面代码是创建一个Dispatch对象并在消息负载模型下使用DOMSource对象:
...
QName serviceName = new QName("http://org.apache.cxf","stockQuoteReporter");
Service s = Service.create(serviceName);
QName portName = new QName("http://org.apache.cxf","stockQuoteReporterPort");
Dispatch<DomSource> dispatch = s.createDispatch(portName,DOMSource.class,Service.Mode.PAYLOAD);
...
. 构建请求消息(略)
. 同步调用
为消费者生成一个同步调用的响应,你使用Dispatch对象的invoke()方法。
T invoke(T msg) throws WebServiceException;
同步的例子:
...
DocumentBuilder db = DocumentBuilderFactory.newDocumentBuilder();
Document requestDoc = db.newDocument();
Element root = requestDoc.createElementNS("http://org.apache.cxf/stockExample","getStockPrice");
root.setNodeValue("DOW");
DOMSource request = new DOMSource(requestDoc);
DOMSource response = disp.invoke(request);
...
. 异步调用
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规范,通过实现特定接口,可以在消息发送前、接收后等关键点进行干预。拦截器分为两种类型:客户端拦截器和服务器端拦截器,分别处理客户端和服务端的请求和响应。 ### 二、拦截器的生命...
===如资源质量问题,可半价退款,代下全网资源,价格公道==== 适合练手、课程设计、毕业设计的Java项目源码:进销存管理系统(jsp+mssql).rar 适合练手、课程设计、毕业设计的Java项目源码:进销存管理系统(jsp+mssql).rar 适合练手、课程设计、毕业设计的Java项目源码:进销存管理系统(jsp+mssql).rar 适合练手、课程设计、毕业设计的Java项目源码:进销存管理系统(jsp+mssql).rar 适合练手、课程设计、毕业设计的Java项目源码:进销存管理系统(jsp+mssql).rar 适合练手、课程设计、毕业设计的Java项目源码:进销存管理系统(jsp+mssql).rar 适合练手、课程设计、毕业设计的Java项目源码:进销存管理系统(jsp+mssql).rar 适合练手、课程设计、毕业设计的Java项目源码:进销存管理系统(jsp+mssql).rar 适合练手、课程设计、毕业设计的Java项目源码:进销存管理系统(js。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
光储并网直流微电网simulink仿真模型,光伏采用mppt实现最大功率输出。 储能由蓄电池和超级电容构成的混合储能系统。 为了确保微网并网时电能质量,采用二阶低通滤波法对光伏输出功率进行抑制,通过设置不同截止频率将高频功率给超级电容响应,中频给蓄电池,低频功率并入大电网,有效提高电能质量。 逆变器采用基于电网电压双闭环控制
深圳建筑工程公司管理制度手册
No.259 S7-200 组态王 基于plc控制的智能楼宇消防系统 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面
一个简单的ppt,介绍散热分析软件Icepak的使用。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
最新组态图形,楼宇自控空调,送排风专用图形全网最全图库,总共600张图,图形格式png,gif;含暖通风管,风机。 图形适用于空调机组,新风机组,送排风机。 图形文件
博途1200恒压供水程序,恒压供水,一拖三,PID控制,3台循环泵,软启动工作,带超压,缺水保护,西门子1200+KTP1000触摸屏
No.713 基于S7-200 PLC自动扶梯控制系统 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面
No.942 基于S7-200 PLC和组态王港口码头装卸料小车控制系统 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面 组态王6.55画面,内部程序可以不连接plc运行。 模拟动画,参数设定。 程序带注释。 图纸齐全,接线图原理图。 优惠款
AD封装库
就业人口,在我国是指在16周岁以上,特殊职业需要18周岁以上,从事一定社会劳动并获取劳动报酬或经营收入的人员, 就业是民生之本,特别是在当前我国经济减速换挡、结构优化调整、动力加快转换的关键时期,就业的“稳定器”作用显得更加重要。 通过促进经济稳步发展,创造多重就业环境,扩大就业机会,我国就业整体形势延续稳定向好。失业率将会维持在较低水平,而有些产能会因产能、环保压力、贸易摩擦、体制机制障碍等因素影响,会导致部分行业瓦解出现较为突出的失业问题。
料箱输送线程序,有合流和分拣, 精华部分是WCS和PLC的Socket接口和分拣控制程序 提供设备布局图和电气图纸以及博途V16程序。 程序源自欧企,无加密,外企程序还是比较美观的,程序仅供学习参考,不讲解 硬件配置:PLC:1516F-3 PN DP,1212C等 HMI:TP1200 Confort等 主要设备有:英特诺直流辊筒电机和控制卡 条码阅读器DataMan 470 SEW MOVIfit变频器
一个关于机器人操纵运动规划的项目,使用基于 ROS 和 Gazebo 模拟的深度强化学习 资源内项目源码是均来自个人的课程设计、毕业设计或者具体项目,代码都测试ok,都是运行成功后才上传资源,答辩评审绝对信服的,拿来就能用。放心下载使用!源码、说明、论文、数据集一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 4、如有侵权请私信博主,感谢支持
基于粒子群优化的RBF神经网络预测算法 bp神经网络预测算法 RBF神经网络算法预测算法 内涵详细的代码注释
基于Python的MD5数字碰撞的GUI程序
labview yolov5 opencv dnn推理,封装dll, labview调用dll,支持同时加载多个模型并行推理,可cpu gpu, 可识别视频和图片,只需要替模型的onnx和nameclass即可
最后一个支持win7系统的免费开源录屏工具-OBS-Studio-27.2.4-Full-Installer-x64.exe.zip
内容概要:本文详细介绍了全国计算机二级竞赛的情况,涵盖了竞赛的目的、目标群体、竞赛流程、个人参赛心得及其对参赛者的深远意义。文章描述了该竞赛由全国计算机等级考试办公室举办,针对大学生及其他相关人员,旨在评估编程设计能力、算法知识及数据结构等方面的专业能力。文中强调竞赛对于提升编程能力和加深对数据结构及算法认识的价值。竞赛过程既考察参赛者理论素养,又强调实战技能的应用和发挥,尤其是面对难题时保持冷静并寻找有效解决途径的能力。 适合人群:准备参加类似计算机科学竞赛的学生、程序员及有兴趣提高自身编码和算法能力的计算机爱好者。 使用场景及目标:①帮助读者了解全国计算机二级竞赛的内容和形式;②激励读者积极参与竞赛,锻炼自己的实际动手能力和解题技巧。 阅读建议:建议准备参赛或者希望改善自己编程实力的人士认真阅读本篇文章,从中学到竞赛的经验与教训,并结合自身实际情况调整训练计划以期在未来取得更好的成绩。此外还应该持续关注最新资讯和技术趋势来更好地适应比赛要求。