运行环境
IDE:springsource(支持maven) jdk:1.7 CXF:2.7.8 tomcat:6.0.26
代码下载路径:
http://download.csdn.net/detail/liuxigiant/6832351
本例的代码和http://blog.csdn.net/liuxigiant/article/details/17732887例子中的差不多,只是本例中以契约优先的方式来发
本例参照了CXF框架压缩包apache-cxf-2.7.8.zip下apache-cxf-2.7.8\samples目录下的wsdl_first_soap12项目
这个实例会展示出以契约优先(或者可以说是WSDL优先)的方式开发CXF WebService服务,同时会整合spring框架,使用spring框架将服务发布到tomcat容器中,项目的构
建会用Maven管理。
★代码优先和契约优先的区别
所谓契约优先的开发方式,即先编写WebService服务描述文件(.wsdl文件),然后根据生成的服务接口编写服务实现类;
所谓代码优先的开发方式,即先编写WebService服务实现类,然后发布服务,访问服务地址(地址?wsdl),得到生成的wsdl文件,前面的例子都是代码优先的开发方式。
下面展示契约优先的方式的开发流程:
1、编写服务描述文件(WSDL文件)
首先需要编写一个XSD文件,这个文件定义服务请求和响应的报文内容;再编写wsdl文件,引入定义的XSD文件。
本实例的WSDL文件和XSD文件在项目工程的 policy\src\main\resources\wsdl 目录下。(下载路径在文章的最上面)
2、新建项目
新建一个maven项目( New ---> Maven Project )
在新建maven项目的时候会选择项目原型 (Select an Archetype),由于我们创建的是web项目,因此选择原型的时候不要选择quickstart 原型,需要选择maven-
archetype-webapp 原型
3、pom文件配置,生成代码
1)将第1步中编写的文件复制到项目的 src\main\resources\wsdl 目录下
2)编写pom文件,添加 wsdl2java 插件 (这个插件可以根据WSDL文件自动生成代码,生成的代码可以在项目的 target\generated-sources\cxf 目录下找到)
由于要整合spring和CXF框架,spring和CXF的依赖也可以在这个步骤中一起配置。
maven的wsdl2java插件可参照官网:http://cxf.apache.org/docs/maven-cxf-codegen-plugin-wsdl-to-java.html (实例中参照wsdl_first_soap12项目的pom配置)
pom文件中在 wsdl2java 插件的configuration配置下添加sourceRoot配置,可以指定代码生成的目录
本例中没有指定生成目录,默认生成的目录是 policy\target\generated-sources\cxf
查看自动生成的代码可以看出:
接口名称和WSDL文件中的portType的名称一致;
接口中的方法名和WSDL文件中operation的名称一致。
notes:
此处的代码生成可以不使用maven插件,直接使用java提供的wsimport或者cxf提供的wsdl2java工具,这两个工具都在对应的安装目录的bin目录下。
可参考http://blog.csdn.net/liuxigiant/article/details/17525385文章中最后面一点关于客户端生成的介绍
下面以A.wsdl 文件自动生成代码为例, A.wsdl文件关联了一个 B.xsd
对于CXF:
进入cmd --> cd 到cxf安装目录的bin 目录下 --> wsdl2java -d D:\cxf -keep -verbose D:\A.wsdl
对于java:
进入cmd --> cd 到jdk安装目录的bin 目录下 --> wsimport -d D:\test_wsimport\java -keep -verbose D:\A.wsdl -b D:\B.xsd
对于使用jdk提供的工具生成代码,若不指定 -b D:\test_wsimport\B.xsd参数,则会报错找不到对应的xsd元素定义,但 B.xsd明显在A.wsdl文件中已经导入了,CXF就能正确解析,jdk就只能额外添加参数(或许个中有玄机吧!)。
4、编写 WebService 服务实现类
服务实现类是 com.service.impl.InsureServiceImpl ,需要注意的是这个实现类实现的接口和实现类中入参和出参实体类都是步骤3中根据WSDL文件自动生成的。
注意实现类要指定WebService注解以及其父接口。
5、修改配置文件
1)修改 web.xml 配置文件
主要配置spring listener,启动spring容器;Spring 配置文件路径;配置CXF Servlet ,拦截CXF WebService请求;
2)在web.xml文件中指定了spring配置文件路径 WEB-INF/Application-context.xml ,新建Application-context.xml 文件 ,配置发布步骤4中编写的WebService服务实现类
6、启动服务
至此代码已经完成,将代码发布到web服务器上 (Run As ---> Run On Server)
7、验证服务
将WSDL文件导入到SoapUI中,服务请求地址修改为 http://localhost:8080/policy/insureService ,请求服务
服务地址 http://localhost:8080/policy 是固定的 ,/insureService 是在spring配置文件中发布服务时候指定的,和struts2的请求路劲配置类似
从上图可以看出,接口请求成功,后台也能打印出正确的信息。