【WebService】——CXF整合Spring


相关博客:

【WebService】——入门实例

【WebService】——SOAP、WSDL和UDDI


前言:

      之前的几篇博客基本上都是使用jdk来实现WebService的调用,没有使用任何框架的东西。这样的操作对WebService客户端、服务端的调用、生成等关系的理解会比较深刻,当然也有很大的弊端,需要手动拷贝生成的代码,进行大量重复性的工作。这时候就需要引入框架了,本篇博客介绍其中一种框架CXF,他可以和spring整合实现WebService。


1、下载CXF

       apache-cxf-2.5.0

       解压之后可以看到它的目录结构,其中bin中主要是一些bat文件或命令,后面会经常用到的就是wsdl2java。lib中是一系列的jar包。因为cxf支持spring,自带的lib中有一些spring的核心包。




2、环境变量

在Path的值后加“;E:\software\apache-cxf-2.5.0\bin” 注意:加上;分号


测试是否配置成功:

cd E:\software\apache-cxf-2.5.0\bin
e:
wsdl2java

如果出现如下信息,则说明已经可以找到该命令,环境变量配置成功。




3、新建项目(服务端)

引入jar包:

将cxf解压文件的lib目录下的jar包加到项目中。


与前几篇博客相同,我们在服务端给出一个接口IHelloWorld和实现类HelloWorldImpl。

IHelloWorld接口的方法为:

@WebService  
public interface IHelloWorld {  
    public String sayHello(String text);  
}  


实现类HelloWorldImpl。

@WebService(endpointInterface="cn.com.service.IHelloWorld")  
public class HelloWorldImpl implements IHelloWorld {  
    public String sayHello(String text) {     
        return "Hello" + text ;  
    }  
}  


配置文件

1)applicationContext.xml

     在src下新建该文件,其中import标签引入的三个配置文件在cxf的核心jar包下,具体路径:cxf-2.5.0.jar\META-INF\cxf。

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:jaxws="http://cxf.apache.org/jaxws"  
    xmlns:cxf="http://cxf.apache.org/core"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
    http://cxf.apache.org/jaxws   
    http://cxf.apache.org/schemas/jaxws.xsd">  
      
    <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-servlet.xml" />  
      
    <bean id="hello" class="cn.com.service.HelloWorldImpl"/>  
      
    <jaxws:endpoint id="helloWorld" implementor="#hello" address="/HelloWorld" />  
  
</beans> 


2)web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/applicationContext.xml</param-value>
	</context-param>
	<listener>
		<!-- 该listener保证 在web应用启动时加载spring容器 -->
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

    <!--所有来自/*的请求,都交由CXFServlet处理 -->
	<servlet>
		<servlet-name>CXFServlet</servlet-name>
		<!-- <display-name>CXF Servlet</display-name> -->
		<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>CXFServlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
</web-app>


发布服务

      将项目部署到tomcat上,启动后在浏览器地址输入http://localhost:8080/webws/HelloWorld?wsdl (webws为项目名称)。

<wsdl:definitions name="HelloWorldImplService" targetNamespace="http://service.com.cn/">
	<wsdl:portType name="HelloWorldImpl"></wsdl:portType>
	<wsdl:binding name="HelloWorldImplServiceSoapBinding" type="tns:HelloWorldImpl">
		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
	</wsdl:binding>
	<wsdl:service name="HelloWorldImplService">
		<wsdl:port binding="tns:HelloWorldImplServiceSoapBinding" name="HelloWorldImplPort">
			<soap:address location="http://localhost:8080/webws/HelloWorld"/>
		</wsdl:port>
	</wsdl:service>
 </wsdl:definitions>


4、生成客户端

新建一个空的客户端项目,进入src目录,使用wsdl2java生成客户端。



Refresh刷新项目,可以看到,客户端项目中生成的相应的文件,效果和使用wsimport命令相同。


测试:

在客户端新建测试类,注意在测试的时候要保证tomcat上部署好服务。

public static void main(String[] args) {
		HelloWorldImplService factory=new HelloWorldImplService();
		IHelloWorld hw=factory.getHelloWorldImplPort();
		System.out.println(hw.sayHello("Sherry"));
	}




      以上就是cxf整合spring实现WebService调用的例子。小编认为,cxf框架实现WebService的亮点有两个:一是将生成客户端的命令进行了封装,省去了用jdk开发时复杂的命令输入和繁琐的文件拷贝工作。二是整合spring,spring框架的优点就不用多说了,大大提高了开发的效率和可扩展性。

posted @ 2016-03-19 17:31  Sherry&Yang  阅读(164)  评论(0编辑  收藏  举报