最近搞有个webservice的client需要开发,因为看了camel一段时间,也知道cxf这个webservice的框架,所以这次就学习下试试吧。这里记录一下使用过程中的一些记录。
1.通过使用cxf的wsdl2java工具,将wsdl转换成java类,
这个工具有几个参数,我使用的是:
wsdl2java -all -exsh true -d src xxxx.wsdl
这里-exsh需要注意,默认为false,表示生成的java接口方法中,不带soap head的参数,我开始没有设置,后来在处理soap response的head时候遇到问题,就把这个设置成了true。
具体查看http://cxf.apache.org/docs/wsdl-to-java.html
2.spring配置cxf的client
<bean id="authHead" class="com.elitecrm.quartz.task.MayorHotline.AddSoapHeadInterceptor">
<property name="userName"><value>Admin</value></property>
<property name="password"><value>123456</value></property>
</bean>
<jaxws:client id="jaxwsClient" serviceClass="cn.gov.wuxi.MayorHotlineSoap"
address="http://127.0.0.1:8080/MayorHotline/MayorHotline.asmx?wsdl" >
<jaxws:outInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
<ref bean="authHead"/>
</jaxws:outInterceptors>
</jaxws:client>
jaxws:client标签,可以轻松配置一个webservice client 其中还可以配置interceptors,一开始我不知道-exsh这个参数的时候,就通过这个authHead来添加soap head。
interceptors编写时候,需要注意构造函数中需要提供Phase,本来不知道,一直看不明白为啥日志里一个warning说缺少Phase然后就不添加这个interceptor。
Phase这个类在org.apache.cxf.phase中有定义,定义了多个常量,表示webservice发出请求或者接受请求过程中的不同阶段。
自己定义的interceptor需要实现org.apache.cxf.interceptor.Interceptor接口中的handleMessage方法:
public void handleMessage(SoapMessage sm) throws Fault {
Document doc=DOMUtils.createDocument();
Element userName=doc.createElement("UserName");
userName.setTextContent(this.userName);
Element passWord=doc.createElement("PassWord");
passWord.setTextContent(this.password);
Element root=doc.createElementNS("http://www.wuxi.gov.cn/", "AuthHeader");
root.appendChild(userName);
root.appendChild(passWord);
QName qname=new QName("RequestSOAPHeader");
SoapHeader head=new SoapHeader(qname,root);
List<Header> headers=sm.getHeaders();
headers.add(head);
}
3.通过Holder来处理soap head
Holder<CustomHeader> customHeaderHolder = new Holder<CustomHeader>();
ArrayOfAskAnswerMainEntity aaames=service.getInsertAskAnswerMainList(projectId,customHeaderHolder);
CustomHeader cHeader=customHeaderHolder.value;
这里的CustomHeader就是生成的webservice接口中定义的
@WebParam(name = "CustomHeader", targetNamespace = "http://www.wuxi.gov.cn/", mode = WebParam.Mode.OUT, header=true)
javax.xml.ws.Holder<CustomHeader> customHeaderHolder
通过传递Holder到接口方法,就能在customHeaderHolder.value获取到soap response中的head对象
cxf还有太多要学习,这里只是第一次使用,便于以后查看。
分享到:
相关推荐
这是我在使用cxf+spring进行开发中的一点总结,如何搭建开发环境、如何配置dao使用,如何解决乱码问题等的经验分享
WebService CXF学习——入门篇 1.CXF由来 2.HelloWorld 3.WSDL描述 WebService CXF学习——进阶篇 1.SOAP讲解 2.JAX-WS讲解 3.对象传递 WebService CXF学习——高级篇(一)(二) 1.整合Spring框架 2.CXF...
cxf学习资料,基本教程,啊啊啊啊啊啊啊啊啊啊!
Apache cxf 学习笔记,供大家参考
CXF框架简单介绍、CXF框架工具使用、CXF框架工具报错解决
用于使用CXF打印SOAP报文,记录WebService日志~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
公司内部提供的文档,有关CXF的,需要的就下吧。好东西,就不多说了。
NULL 博文链接:https://chinesethink.iteye.com/blog/1537005
WebSphere Aplication Servic&Portal学习资料/cxf学习资料 超值
CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx )
webservice cxf2.5.9的使用示例,包含简单的发布与调用说明
CXF webservice 使用实例,CXF创建webservice以及调用示例;WEBSERVICE输入、输出拦截器设置;用户验证;文件上传等。附带所有使用到的JAR包。
cxf学习代码 博文链接:https://jsun.iteye.com/blog/310407
webservice经典学习资料,内容丰富,首先资料
Apache WebService_CXF学习文档
webservice 经典学习资料,内容详细,深入,首先资料
WebService_CXF学习
各种cxf开发学习教程集合,适合初步学习cxf的人学习,全部看完受益匪浅哦!
文中讲解了CXF服务端的库文件,文件配置要求;客户端、服务端的访问示例;CXF的整合;拦截器的使用;等CXF常用的操作。