6、使用CXF开发WebService程序

来源:互联网 发布:abb工业机器人编程 编辑:程序博客网 时间:2024/05/16 15:29

1、CXF是什么

cxf是一个开源框架,实现webservice开发,它支持多种协议,比如:SOAP1.1,1,2XML/HTTP、RESTful 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;}@Overridepublic void add(User user) {userDao.add(user);}@Overridepublic void delete(User user) {userDao.delete(user);}@Overridepublic 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");// 名称空间,serviceNameQName 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 0
原创粉丝点击