基于WSDL契约优先的web services服务器端和客户端开发方式

人亦有言进退维谷 2013-11-29

一.    通过Eclipse方式

1.    服务器端代码产生方式

(1)    Eclipse(以下简称IDE)中创建一个普通的Java Project,或构建一个Maven管理的项目;
(2)    项目右键-Properties-Project Facets,勾选Dynamic Web Module,JAVA EE5对应2.5版本;
(3)    将已有的WSDL文件放在src下任意位置;
(4)    项目右键-New-Other-Web Service;
(5)    Web service type选择Top down Java bean Web Service,Service definition选择WSDL文件,级别为最低的Develop,选择Next。


基于WSDL契约优先的web services服务器端和客户端开发方式
 
(6)    Output Directory中选择src位置(支持Maven项目),Package Name中填写包路径,选择Finish;


基于WSDL契约优先的web services服务器端和客户端开发方式
 

2.    客户端产生方式

(1)    构建普通Java Project项目或在一个Maven项目中,设置Project Facets,并将WSDL放入项目目录下;
(2)    项目右键-New-Other-Web Service Client;
(3)    Service definition选择WSDL文件,级别为最低的Develop,选择Next。
(4)    Output Directory中选择src位置(支持Maven项目),Package Name中填写包路径,选择Finish;

3.    测试

(1)    服务器端可以采用CXF发布,或简单通过Endpoint发布。


基于WSDL契约优先的web services服务器端和客户端开发方式
 
(2)    客户端可以通过调用生成代码中已有的 ***_Client中Main方法进行调用;

二.    通过Maven中CXF插件

1.    添加CXF依赖及插件

(1)    在pom文件中加入以下依赖

<!-- cxf -->
<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-frontend-jaxws</artifactId>
</dependency>
<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-transports-http</artifactId>
</dependency>

(2)    加入cxf插件,配置wsdl所在位置及代码生成存放位置

<!-- cxf wsdl2java 插件 -->
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<configuration>
    <sourceRoot>${basedir}/target/generated-sources/cxf</sourceRoot>
    <wsdlOptions>
	<wsdlOption>
	    <wsdl>${basedir}/src/main/resources/wsdl/soapservice.wsdl</wsdl>
	</wsdlOption>
    </wsdlOptions>
</configuration>
</plugin>

2.    生成接口编写实现

(1)    生成接口
执行 mvn cxf-codegen:wsdl2java,后在项目/target/generated-sources/cxf下会生成服务器端代码,将需要的Domain和服务端点接口(SEI)拷贝到项目中;
(2)    添加实现类实现SEI
添加SEI的实现类,并在该类上添加注解@WebService,参数如下:
serviceName 值与 SEI的@WebService注解中name属性值相同
targetNamespace值与 SEI的@WebService注解中targetNamespace属性值相同
endpointInterface 值为SEI的全限定名

如果需要配置记录他们的每一个日志消息可以在实现类上添加注解@Features


基于WSDL契约优先的web services服务器端和客户端开发方式
 

可以或Endpoint发布web services。

3.    通过Sping发布

(1)    Web.xml

基于WSDL契约优先的web services服务器端和客户端开发方式
 

(2)    Sping配置 

基于WSDL契约优先的web services服务器端和客户端开发方式
 

(3)    启动

启动web项目访问XXX/cxf/ 可以看到wsdl地址如图,点击wsdl后的连接则可以看到wsdl文件内容


基于WSDL契约优先的web services服务器端和客户端开发方式
 

 4.    客户端代码生成及访问

将通过执行mvn cxf-codegen:wsdl2java生成的代码全部拷贝至客户端项目中,创建main方法进行访问,方法如下:


基于WSDL契约优先的web services服务器端和客户端开发方式
 

三.    对比结果说明

两种方式从根本上来讲都是通过CXF中wsdl2java.exe的调用,但还是存在以下一些区别:
(1)    通过IDE生成的整体过程更简单,代码直接生成至指定包下;通过Maven插件需要手动拷贝文件;
(2)    Maven生成的结果文件中,服务器端缺少SEI的实现类,客户端缺少调用SEI的实现类,而用IDE生成的情况下,这两个类全部存在。
综上,我认为通过IDE生成基于WSDL契约优先的web services服务器端和客户端代码更方便快捷。

相关推荐