CXF框架发布WebService服务的例子

1、CXF框架概念介绍
  Apache CXF 是一个开源的 WebService 框架,CXF可以用来构建和开发 WebService,这些服务可以支持多种协议,比如:SOAP、POST/HTTP、HTTP ,CXF 大大简化了WebService并且可以天然地和 Spring 进行无缝集成。
  CXF是 Celtrix (ESB框架)和 XFire(webserivice) 合并而成,核心是org.apache.cxf.Bus(总线),类似于Spring的 ApplicationContext,CXF默认是依赖于Spring的,另 CXF 发行包中的jar,如果全部放到lib中,需要 JDK1.6 及以上,否则会报JAX-WS版本不一致的问题。
  CXF 内置了Jetty服务器 ,它是servlet容器,好比tomcat。
  
2、CXF框架特点
A、与Spring、Servlet做了无缝对接,cxf框架里面集成了Servlet容器Jetty
B、支持注解的方式来发布webservice
C、能够显示一个webservice的服务列表
D、能够添加拦截器:输入拦截器、输出拦截器 :输入日志信息拦截器、输出日志拦截器、用户权限认证的拦截器

首先创建两个java项目
在这里插入图片描述
第二步,导包
在CXF_Server中的lib导入
在这里插入图片描述
TypeService.java

package cn.itcast.type;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService(serviceName="typeManager")
public interface TypeService {
	@WebResult(name="type")
	public String getType(@WebParam(name="position")int position);
}

TypeServiceImpl.java

package cn.itcast.type;

import org.apache.cxf.frontend.ServerFactoryBean;
import org.apache.cxf.interceptor.Interceptor;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

public class TypeServiceImpl implements TypeService {
	public String getType(int position){
		String type=null;
		switch (position) {
		case 1:
			type="这是1"; 
			break;
		case 2:
			type="这是2";
			break;
		case 3:
			type="这是3";
			break;  
		case 4:
			type="这是4";
			break;

		default:
			break;
		}
		return type;
	}
	/**通过cxf框架发布webservice
	 *  1. ServerFactoryBean
	 *    - 不设置注解也可以发布webservice服务, 不支持注解
	 *    - 不支持拦截器的添加
	 *  2. JaxWsServerFactoryBean
	 *    - 支持注解
	 *    - 可以添加拦截器
	 *  3. webservice 访问流程:
	 *    1. 检测本地代理描述的wsdl是否与服务端的wsdl一致 ,俗称为握手
	 *    2. 通过soap协议实现通信 ,采用的是post请求 , 数据封装在满足soap规约的xml中
	 *    3. 返回数据 同样采用的是soap通信,  数据封装在满足soap规约的xml中
	 * @param args
	 
	public static void main(String[] args){
		TypeService typeService = new TypeServiceImpl();
		ServerFactoryBean serverFactoryBean = new ServerFactoryBean();
		//Endpoint :地址  , 实现对象
		serverFactoryBean.setAddress("http://127.0.0.1:8080/cxf/typeService");//访问地址自定义
		serverFactoryBean.setServiceClass(TypeService.class);//对外提供webservcie的业务类或者接口
		serverFactoryBean.setServiceBean(typeService);//服务的实现bean
		serverFactoryBean.create();//创建,发布webservice
		System.out.println("wsdl地址:http://127.0.0.1:8080/cxf/typeService?WSDL");
	}
	*/
	public static void main(String[] args){
		TypeService typeService = new TypeServiceImpl();
		JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();
		jaxWsServerFactoryBean.setAddress("http://127.0.0.1:8080/cxf/typeService");//访问地址自定义
		jaxWsServerFactoryBean.setServiceClass(TypeService.class);//对外提供webservcie的业务类或者接口
		jaxWsServerFactoryBean.setServiceBean(typeService);//服务的实现bean
		//添加输入拦截器  :输入显示日志信息的拦截器
		jaxWsServerFactoryBean.getInInterceptors().add(new LoggingInInterceptor());
		//添加输出拦截器  :输出显示日志信息的拦截器
		jaxWsServerFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
		//创建,发布webservice
		jaxWsServerFactoryBean.create();
		System.out.println("wsdl地址:http://127.0.0.1:8080/cxf/typeService?WSDL");
	}
}

http://127.0.0.1:8080/cxf/typeService?WSDL查看是否发布不成功
在这里插入图片描述
发布成功之后,打开cmd,通过wsimport生成本地代理
在这里插入图片描述在这里插入图片描述
将本地生成的类直接放到Client中

或者通过
在这里插入图片描述
打成jar包后再放入Client中(我这里打成了jar包)
在这里插入图片描述
Test.java

package cn.itcast.a;

public class Test {
	public static void main(String[] args){
	TypeManager ws = new TypeManager();
	TypeService typeService = ws.getTypeServicePort();
	String type = typeService.getType(2);
	System.out.println(type);
	}
}

输出结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值