6、使用CXF开发WebService程序

1、CXF是什么

cxf是一个开源框架,实现webservice开发,它支持多种协议,比如:SOAP1.1,1,2XML/HTTPRESTful HTTP 或者 CORBA

cxf开发的webservice可以通过tomcat运行,cxf开发的webservice服务接口可以和javaweb应用程序部署在一块儿,共同使用一个端口80

cxf基于SOA面向服务架构理念。依赖spring进行各各cxf模块整合。


2、CXF的下载和安装

2.1 下载

从官网下载最新的CXF的版本http://cxf.apache.org/download.html

2.2 安装

由于需要使用到bin目录下的文件,需要配置下面的环境变量。

JAVA_HOME,

CXF_HOME=cxf的目录

Path = %JAVA_HOME%\bin;%CXF_HOME%\bin;

CLASSPATH=.;%CXF_HOME%\lib\cxf-manifest.jar


3、需求

开发一个用户管理的WebService服务端,对外提供用户的增删改查操作。


4、服务端的开发 (利用CXF开发,是在接口上加上@WebService注解)

4.1.1  新建一个Java项目,名称叫UserCXFWebService

       将CXF中的jar包全部导入

4.1.2 传输的实体类要实现Serializable接口

public class User implements Serializable {
	private int id;
	private String name;
	private int age;
        //setter getter
}

4.2  关于服务接口的定义如下

//targetNamespace:指定命名空间
//name:portType的名称
//portName:port的名称
//serviceName:服务名称
//作为发布WebService的类

@WebService(targetNamespace = "http://user.namager.cn", name = "IUserServiceSoap", portName = "IUserServicePort", serviceName = "IUserService")
public interface IUserService {
	// 增加用户
	public void add(@WebParam(name = "user") User user);

	// 删除用户
	public void delete(@WebParam(name = "user") User user);

	// 查询用户
	public User findById(@WebParam(name = "id") int id);
}


4.3 关于接口的实现类

public class UserServiceImpl implements IUserService {

	// 持有IUserDao的引用,便于操作数据库
	private IUserDao userDao = new UserDaoImpl();

	public IUserDao getUserDao() {
		return userDao;
	}

	public void setUserDao(IUserDao userDao) {
		this.userDao = userDao;
	}

	@Override
	public void add(User user) {
		userDao.add(user);
	}

	@Override
	public void delete(User user) {
		userDao.delete(user);
	}

	@Override
	public User findById(int id) {
		return userDao.findById(id);
	}

}

4.3 利用CXF发布WebService的代码如下

public class PublicTest {
	public static void main(String[] args) {
		// 利用cxf的工厂bean发布webservice服务
		// 通过spring配置方式发布服务,实现了下面的代码
		JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();
		// 设置webservice服务
		jaxWsServerFactoryBean.setAddress("http://localhost:8888/usermanager");
		// 设置SEI(接口类型)
		jaxWsServerFactoryBean.setServiceClass(IUserService.class);
		// 设置服务提供者即service对象
		jaxWsServerFactoryBean.setServiceBean(new UserServiceImpl());
		// 发布服务
		jaxWsServerFactoryBean.create();
	}
}


5、客户端的开发

5.1 新建Java项目,名称为UserCXFClient

       将CXF中的jar包全部导入


5.2 利用CXF中bin目录下的wsdl2java命令,生成客户端的调用代码


5.3 编写客户端的调用代码

1、第一种调用方法 CXF的调用

public class ClientTest1 {
	public static void main(String[] args) {
		// 通过JaxWsProxyFactoryBean实现客户端调用
		JaxWsProxyFactoryBean wsProxyFactoryBean = new JaxWsProxyFactoryBean();

		// 设置调用的webService的地址
		wsProxyFactoryBean.setAddress("http://localhost:8888/usermanager?wsdl");
		// 设置SEI(接口类型portType)
		wsProxyFactoryBean.setServiceClass(IUserServiceSoap.class);
		// 创建客户端调用对象(也是portType,与上面的接口是一致的)
		IUserServiceSoap port = wsProxyFactoryBean
				.create(IUserServiceSoap.class);
		// 调用webservice发布的方法
		User user = port.findById(1);
		System.out.println(user);
	}

}

2、第二个调用方法   原始的调用方法

public class ClientTest2 {
	public static void main(String[] args) throws MalformedURLException {
		// wsdl地址
		URL wsdlDocumentLocation = new URL(
				"http://localhost:8888/usermanager?wsdl");
		// 名称空间,serviceName
		QName serviceName = new QName("http://user.namager.cn", "IUserService");
		// 通过手动指定wsdl地址和服务名称来创建服务视图
		Service service = Service.create(wsdlDocumentLocation, serviceName);
		// portType的class来创建接口,然后调用服务方法
		IUserServiceSoap port = service.getPort(IUserServiceSoap.class);
		// 通过服务来调用方法
		User user = port.findById(1);

		System.out.println(user);
	}

}

6、利用CXF实现WebService代码的下载

上面CXF实现WebService代码的下载

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值