IDE:springsource jdk:1.7 CXF:2.7.8 maven:3.1.1
代码下载路径:http://download.csdn.net/detail/liuxigiant/6937077
简介
本实例是基于CXF框架实现的WebService客户端,使用maven生成客户端代码和管理依赖,集成spring框架配置客户端。
客户端实现的方式CXF官网上给出了很多参照,本实例就是参照官网上其中一种方式实现的。
官网地址:http://cxf.apache.org/docs/writing-a-service-with-spring.html 本实例参照的是:Create a Client (More Manual Way)
本例子是客户端的实现,上篇文章“CXF契约优先开发方式”作为服务器端(http://blog.csdn.net/liuxigiant/article/details/18043903)
本例子会写的比较概括,详细可参考CXF官网和“CXF契约优先开发方式”文章
实现步骤
1、获取服务器端的WSDL文件(本例子是客户端,可以直接使用服务器端编写的WSDL文件)
2、新建一个maven项目,配置pom文件
pom文件主要配置生成客户端代码(根据WSDL文件生成代码)的插件和管理依赖(本例子涉及到spring和cxf的jar包)。
3、编写spring配置文件beans.xml(本例子将该文件放在类路径下)
该文件的配置参考是参考官网配置的,需要修改服务定义类和服务器地址
4、编写客户端访问程序
新建类Client.java,新建main方法,获取spring配置的client类,编写访问服务的实现代码。
5、运行
启动服务器端,运行main方法,控制台能正确打印,服务调用成功
异常问题
运行的时候抛了个异常,异常信息如下:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Could not find conduit initiator for address: http://localhost:8080/policy/insureService and transport: http://schemas.xmlsoap.org/soap/http
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:157)
at com.sun.proxy.$Proxy36.insure(Unknown Source)
at policy_client.Client.main(Client.java:22)
Caused by: java.lang.RuntimeException: Could not find conduit initiator for address: http://localhost:8080/policy/insureService and transport: http://schemas.xmlsoap.org/soap/http
上网查询了下说下spring 配置文件里面需要添加以下配置项,最后调试时候发现下面的配置项可以不要(那么客户端的配置比服务器端就可以去掉以下配置)。
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-http.xml" />
最终找到的错误是配置address的时候,填写的路径的前面多了个空格。。。。。。。。