Apche CXF WebService框架,使用CXF创建并发布服务。

Apche CXF WebService框架

一、介绍
	1.CXF是apache旗下的开源框架,由Celtix + XFire这两门经典的框架合成,是一套非常流行的web service框架。
	2.CXF的官方网站:
		http://cxf.apache.org/download.html
		下载apache-cxf-3.1.6版本
	3.它提供了对JAX-WS的全面支持,只需要拷入jar包即可,不需要任何改动,同时它能与spring进行完美结合。

使用CXF创建并发布服务

1.实际的应用场景中,通常采用更为专业的Java EE应用服务器来发布Web服务。
2.CXF是流行的Web服务开发框架之一,代表着Celtix和Xfire项目的合并

一、实现步骤

  1. 添加所需要的jar文件(简单粗暴方式)
        排除geronimo-servlet_3.0_spec-1.0.jar,javax.servlet-api-3.1.0.jar,WHICH_JARS
    三个文件后的所有jar包共147个文件
  2. 设计并实现服务接口
        1)在web.xml中配置CXFServlet来初始化CXF环境
        2)在applicationContext.xml中配置cxf初始化监听器和配置
        3)部署并访问发布地址,检查是否可以生成正确的wsdl文件

代码实现

一、web.xml中添加cxf和spring的配置信息。

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springws.xml</param-value>
</context-param>
<listener>
	<listener-class>
		org.springframework.web.context.ContextLoaderListener
	</listener-class>
</listener>
<servlet>
	<servlet-name>CXFServlet</servlet-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>
	<!-- 拦截器拦截services的所有请求 -->
	<url-pattern>/services/*</url-pattern>
</servlet-mapping>

二、添加WebService接口

@WebService
public interface WeatherService {

	public Map<String,ArrayList<City>> getProvince();

	public ArrayList<City> getCity(String province);
	
}

// City实体类
public class City {

	private int id;
	private String cityName;
	private String code;
	
}

三、创建实现类,重写WeatherService接口。

@WebService
public class WeatherServiceImp implements WeatherService {

	private static Map<String,ArrayList<City>> provincies;
	
	static {
		
		provincies = new HashMap<String, ArrayList<City>>();
		
		ArrayList<City> guangdong = new ArrayList<City>();
		guangdong.add(new City(1,"广州","111"));
		guangdong.add(new City(2,"深圳","222"));
		guangdong.add(new City(3,"佛山","333"));
		
		ArrayList<City> hunan = new ArrayList<City>();
		hunan.add(new City(4,"长沙","444"));
		hunan.add(new City(5,"永州","555"));
		hunan.add(new City(6,"岳阳","666"));
		
		ArrayList<City> hubei = new ArrayList<City>();
		hubei.add(new City(71,"武汉区","777"));
		hubei.add(new City(8,"黄石区","888"));
		hubei.add(new City(9,"襄阳区","999"));
		
		provincies.put("广东省", guangdong);
		provincies.put("湖南省", hunan);
		provincies.put("湖北省", hubei);
		
	}
	
	
	@Override
	public Map<String, ArrayList<City>> getProvince() {
		
		return provincies;
		
	}

	@Override
	public ArrayList<City> getCity(String province) {
		
		return provincies.get(province);
		
	}

}

四、Spring容器的配置。

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

	<import resource="classpath:META-INF/cxf/cxf.xml"/>

	<!-- 实现类的地址 -->
	<bean id="weatherService" class="com.znsd.webservice.service.WeatherServiceImp" />
	<jaxws:endpoint id="wsServiceBean" implementor="#weatherService" address="/getWeather" publish="true" />
	
</beans>

配置完成后打开浏览器输入地址
http://localhost:8080/项目名/services
访问后会出现此页面
在这里插入图片描述
点击该路径跳转到:
在这里插入图片描述
记住此url
    输入:wsimport -p com.lxit.weather(包名,任意自己取) -keep http://localhost:8080/cxf_web_service/services/getWeather?wsdl(上面的url)后回车即可如图即为成功
在这里插入图片描述
后刷新项目就会出现该包:
在这里插入图片描述
开始main 方法调用:

public static void main(String[] args) {
		
		WeatherService service = new WeatherServiceImpService().getWeatherServiceImpPort();
		Return province = service.getProvince();
		List<Entry> entry = province.getEntry();
		for (Entry e : entry) {
			System.out.println(e.getKey());
		}
		
		System.out.println("==============");
		
		List<City> city = service.getCity("湖南省");
		for (City c : city) {
			
			System.out.println(c.getCityName());
			
		}
		
		
	}

显示:
广东省
湖南省
湖北省
==============
长沙
永州
岳阳

    使用CXF创建并发布服务功能完成。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值