最近搞有个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-rsa加密(记录)"涉及到的是使用Apache CXF框架进行RSA加密的相关技术实践。Apache CXF是一个开源的Java框架,用于构建和开发服务导向架构(SOA)的应用程序,它支持Web服务标准以及SOAP和RESTful API...
压缩包中的"学习笔记.docx"可能包含了作者对CXF学习过程的详细记录,包括但不限于CXF的核心概念、配置文件解析、服务发布与调用步骤、异常处理机制、以及与其他技术(如servlet)的集成等内容。这些笔记通常会以实例...
4. **CXF配置与部署**:学习如何使用CXF提供的XML配置文件(如cxf.xml和web.xml)来配置服务和客户端,以及如何在不同的应用服务器(如Tomcat、Jetty等)上部署CXF服务。 5. **服务的创建与消费**:通过实际操作,...
2. **安装与配置**:学习如何在你的开发环境中设置CXF,包括添加依赖库到你的项目,配置Maven或Gradle构建文件,以及如何创建基本的CXF项目结构。 3. **SOAP服务**:了解如何使用CXF创建和消费SOAP服务。这包括WSDL...
WebService-CXF实用手册学习大全的知识点涵盖了WebService技术的多个方面,主要分为以下几个部分: 1. WebService基础: - WebService是一种通过网络提供服务的技术,使用HTTP作为传输协议,SOAP作为消息格式,...
WebService是一种基于SOAP协议的,用于在不同应用之间交换数据和服务的...总而言之,这个压缩包提供了一套完整的CXF与Spring整合的学习资源,涵盖了理论知识和实践经验,对于想要掌握这一技术的人来说是非常宝贵的。
学习这个示例可以帮助初学者快速理解CXF的基本工作原理和使用方法,进而在自己的项目中灵活运用。通过研究源代码,你可以了解CXF如何处理请求、响应,以及如何与HTTP容器(如Tomcat)集成。 总之,Apache CXF是一个...
通过这个链接,开发者可以获取更深入的实践经验和技巧,例如如何配置CXF服务,如何处理异常,或者如何优化性能。 **源码分析** CXF的源码是开放的,这为开发者提供了一个深入理解其工作原理的机会。通过阅读源码,...
当我们将CXF与Spring结合使用时,可以利用Spring的管理能力,简化CXF的配置和部署,提升应用的可维护性和可扩展性。 在“CXF与Spring 2.5整合”中,主要涉及到以下几个知识点: 1. **Spring的依赖注入**:Spring的...
9. **错误处理与日志**:CXF提供了详细的错误处理机制和日志记录,便于调试和问题排查。通过定制错误处理器和日志配置,可以优化错误信息的输出和调试体验。 10. **性能优化**:CXF支持各种性能优化策略,如缓存、...
9. **错误处理和日志记录**:CXF提供了一套完整的错误处理机制,包括异常映射和日志记录,方便开发者调试和排查问题。 10. **性能优化**:CXF提供了缓存、流处理和异步处理等功能,以提高服务的性能和响应速度。 ...
7. **测试与调试**:使用 CXF 提供的测试工具或者自定义测试用例,可以验证服务端和客户端的交互是否正常。同时,日志记录和错误处理也是必不可少的,它们能帮助开发者快速定位和解决问题。 总之,通过学习这个 CXF...
"webservice cxf spring jar jar包"表明讨论的内容是关于使用CXF与Spring框架集成来创建Web服务的,Spring框架是一个广泛使用的Java企业级应用开发框架,它提供了一个全面的编程和配置模型,可以方便地与CXF集成以...
### WebService与CXF基础知识详解 #### 一、WebService简介 **WebService** 是一种通过网络提供的服务,允许不同系统之间...无论是对于初学者还是经验丰富的开发者来说,CXF都是值得深入学习和掌握的重要技术之一。
- 使用CXF的拦截器机制增强服务功能,如日志记录、安全检查等。 通过以上讲解,你应该对使用CXF框架实现Web服务有了基本的理解。实际操作时,需要结合具体的代码示例和项目需求来学习和应用这些知识点。在...
3. **CXF与Spring集成**:学习如何在Spring应用上下文中配置CXF,利用Spring的依赖注入和AOP特性来管理和控制服务生命周期。 4. **数据绑定**:理解JAXB(Java Architecture for XML Binding)的概念,它是CXF用于...
"源码"标签可能暗示着这个压缩包包含了一些示例代码或一个完整的项目结构,让用户能够学习如何将CXF与Spring进行集成。"工具"标签可能表示这些文件是用于辅助开发或测试的工具。 从提供的文件名来看,这些都是...
- **拦截器和终结点**:CXF提供了丰富的拦截器和终结点接口,允许自定义行为,如日志记录、安全检查等。 - **多种传输和绑定机制**:CXF支持HTTP、HTTPS、JMS等多种传输方式,同时可以绑定到不同的消息格式,如SOAP...
通过这个CXF开发范例,开发者不仅可以学习到CXF的基本用法,还能掌握如何在实际项目中整合Spring,构建健壮的Web服务系统。实践中,可以根据需求选择适合的开发方式,无论是SOAP的严谨性还是REST的简洁性,都可以...
【CXF+SPRING例子】是一个关于如何将Apache CXF与Spring框架整合的示例项目。Apache CXF是一个开源服务框架,它允许开发者创建和消费Web服务,而Spring框架则是Java应用开发的强大支撑,提供了依赖注入、AOP(面向切...