结合spring实现CXF

发表时间:2017-12-15 15:05:06 浏览量( 30 ) 留言数( 0 )

学习目标:

1、了解使用CXF。

2、掌握CXF的基本使用


学习过程:

   目前更流行时使用restful的方式了,在很多旧的项目或者一些政府比较传统的项目里面使用这种方式还是比较多的,所以这节课也和大家简单的说一下吧。Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。

Apache CXF的官方网站如下:

http://cxf.apache.org/

你可以下载最新版,同时网站也提供了相信的说明文档

http://cxf.apache.org/docs/index.html

下面我们讲一下如何结合Spring整合CXF

一、服务发布

1、建立项目

同样建立两个项目作为服务端发布web services,另一个就是作为客户端调用web services,因为我们需要结合Spring整合CXF,所以相关的包也需要导入。

2、实现代码

(1)先定义一个接口

package com.biz;
import javax.jws.WebService;
@WebService
public interface HelloBiz {
	public String say(String name);
}

(2)实现类

package com.biz.impl;

import javax.jws.WebService;

import com.biz.HelloBiz;

@WebService(endpointInterface = "com.biz.HelloBiz")
public class HelloBizImpl implements HelloBiz {

	public String say(String name) {
		System.out.println("sayHi called");
		return "Hello " + name;
	}
	
	

}

3、在spring容器中定义实现Beans

修改applicationContext.xml文件,内容如下;

<?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:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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-servlet.xml" />
	
	
	<!-- <jaxws:endpoint id="helloWorld" implementor="com.biz.impl.HelloBizImpl"
		address="/HelloWorld" /> -->

	<bean id="hello" class="com.biz.impl.HelloBizImpl">
      
	</bean>

	<jaxws:endpoint id="helloWorld" implementor="#hello"
		address="/HelloWorld" />

</beans>

4、修改web.xml,添加servlet

<?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>classpath:applicationContext.xml</param-value>
   </context-param>
 
   <listener>
      <listener-class>
         org.springframework.web.context.ContextLoaderListener
      </listener-class>
   </listener>
	
	<servlet>
		<servlet-name>cxf</servlet-name>
		<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>cxf</servlet-name>
		<url-pattern>/services/*</url-pattern>
	</servlet-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

5、测试

上一步我们配置了CXFServlet,现在你可以访问这个servlet就可以看到提供的对web services的管理界面了。

http://localhost:8080/cxfserve/services

点击就可以看到生成WSDL文件了。界面如下:

attcontent/9511bd65-d235-4333-99fd-237808737063.png

二、客户端的实现

客户端的实现比较简单。也是先导入spring和CXF的相关包

1、建立接口,也仅仅是接口就可以了,代码如下:

package com.dao;

import javax.jws.WebService;

@WebService
public interface HelloWorld {
	  String sayHi(String text);
}

2、修改applicationContext.xml

<?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:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">

    <bean id="hello" class="com.dao.HelloWorld" 
          factory-bean="clientFactory" factory-method="create"/>
    
    <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
        <property name="serviceClass" value="com.dao.HelloWorld"/>
        <property name="address" value="http://localhost:8080/cxfservice/ws/HelloWorld?wsdl"/>
    </bean>
	  
</beans>

3、测试

public class Run {
	
	public static void main(String[] args) {
		ApplicationContext context=new FileSystemXmlApplicationContext("src/applicationContext.xml");
		
		HelloWorld helloWorld=(HelloWorld)context.getBean("hello");
		
		String result= helloWorld.sayHi("你好");
		
		System.out.println(result);
		
	}

}