CXF框架介绍及Spring集成
CXF框架介绍及Spring集成
一、CXF框架介绍
1、什么是CXF
Apache CXF = Celtix + Xfire
2、CXF的优势
(1)支持多种协议:
* SOAP1.1,1.2
* HTTP
* CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构,早期语言使用的WS。C,c++,C#)
(2)并可以与Spring进行快速无缝的整合
(3)灵活的部署:可以运行有Tomcat,Jboss,Jetty(内置),IBMWS,BeaWS上面。
3、CXF的目录结构
(1)bin目录
CXF 框架中所提供的可执行工具和命令
(2)docs目录
CXF 所有类(class)对应的 API 文档
(3)etc目录
包含一个基本的Service暴露所需要的web.xml文件,及其它的配置文件
(4)lib目录
lib目录中包含CXF及其运行时所需要的jar包
(5)licenses目录
引用第三方jar包的相关许可协议。
(6)modules目录
CXF框架根据不同特性分开进行编译的二进制包文件。
发布基于 CXF 框架的 Web 项目时,可以选择使用该目录下的所有 .jar 文件,也可以选择 lib目录中的 cxf-2.0.2-incubator.jar文件。
(7)samples目录
示例,包含这些示例的源代码和相关Web 应用配置文件
可以通过samples目录和它各个子目录下的 README.txt的文件来详细了解示例的编译与运行的步骤
二、使用CXF发布服务和调用服务
1、配置环境变量
(1)JAVA_HOME
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.8.0_181
cmd里执行 java -version
能输出对应的JDK信息
(2)CXF_HOME
变量名:CXF_HOME
变量值:F:\CXF\apache-cxf-2.4.2
将资料里的apache-cxf-2.4.2.zip解压出来的,放在了E盘的CXF文件夹里
(3)Path
Path变量里加上刚新建的环境变量,指向里面的bin目录,如果JAVA_HOME配置过了就不需要了
;%JAVA_HOME%\bin;%CXF_HOME%\bin
(4)CLASSPATH
CLASSPATH里加上,如果前面打过.;了,就不要再打了
.;%CXF_HOME%\lib\cxf-manifest.jar;.\build\classes
2、使用CXF发布服务
项目里添加cxf的支持
<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>2.4.2</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>2.4.2</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http-jetty</artifactId><version>2.4.2</version></dependency><!-- https://mvnrepository.com/artifact/junit/junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>
(1)编写服务接口
@WebService
public interface HelloWorld {public String sayHello(@WebParam(name="name")String name);public void addUser(@WebParam(name="user")Users user);public @WebResult(name="javaList")List<Users> getUserList();
}
附实体类:
public class Users {
private Integer id;
private String name;
//get set方法
}
(2)编写接口实现类
public class HelloWorldImpl implements HelloWorld {private List<Users> userList = new ArrayList<Users>();@Overridepublic String sayHello(String name) {return "hello "+name;}@Overridepublic void addUser(Users user) {userList.add(user);}@Overridepublic List<Users> getUserList() {return userList;}
}
(3)使用JaxWsServerFactoryBean来发布服务
public class HelloWorldApp {public static void main(String[] args) {// 创建服务工厂对象JaxWsServerFactoryBean sfb = new JaxWsServerFactoryBean();// 设置服务地址sfb.setAddress("http://127.0.0.1:8888/hello");// 设置服务类sfb.setServiceClass(HelloWorldImpl.class);// 设置服务对象的实例sfb.setServiceBean(new HelloWorldImpl());// 发布服务sfb.create();}
}
3、客户端调用CXF发布的服务
(1)使用CXF里的wsdl2java来生成客户端代码
这种支持SOAP 1.2
E:\wsCode>wsdl2java -d . http://127.0.0.1:8888/hello?wsdl
(2)将生成的客户端代码拷贝到客户端项目里
(3)客户端调用
public class TestHelloServer {public static void main(String[] args) {//和发布基本一致// 创建服务工厂代理对象JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();//设置服务响应类,需要接口类型svr.setServiceClass(HelloWorld.class);//设置服务地址svr.setAddress("http://127.0.0.1:8888/hello");//将创建的服务类返回并强转HelloWorld hw = (HelloWorld) svr.create();//使用webserviceUsers user = new Users();user.setId(1);user.setName("张三");hw.addUser(user);System.out.println(hw.sayHello("李四"));List<Users> list = hw.getUserList();for(Users u:list){System.out.println(u.getName());}}
}
三、CXF和spring boot整合发布webservice服务
1、pom.xml中添加支持
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.21.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.lj</groupId><artifactId>cxf-spring</artifactId><version>0.0.1-SNAPSHOT</version><name>cxf-spring</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws --><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.1.12</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.1.12</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http-jetty</artifactId><version>3.1.12</version></dependency><!-- https://mvnrepository.com/artifact/junit/junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
2、创建服务接口和接口实现类和原来的一样
3、编写WebServiceConfig.java进行配置
package com.lj.cxfspring.config;import com.lj.cxfspring.service.UsersService;
import com.lj.cxfspring.service.impl.UsersServiceImpl;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.xml.ws.Endpoint;@Configuration
public class WebServiceConfig {@Beanpublic ServletRegistrationBean dispatcherServlet() {return new ServletRegistrationBean(new CXFServlet(), "/service/*");//发布服务名称}@Bean(name = Bus.DEFAULT_BUS_ID)public SpringBus springBus() {return new SpringBus();}@Beanpublic UsersService userService() {return new UsersServiceImpl();}@Beanpublic Endpoint endpoint() {EndpointImpl endpoint = new EndpointImpl(springBus(), userService());//绑定要发布的服务endpoint.publish("/user"); //显示要发布的名称return endpoint;}
}
5、查看生成的wsdl
在浏览器上输入http://localhost:8080/service,点击进去就可以看到生成的wsdl了
客户端的使用和前面说的没有变化,可以使用jdk自带的形式也可以使用CXF的形式
CXF框架介绍及Spring集成相关推荐
- 转载 WebService 的CXF框架 WS方式Spring开发
WebService 的CXF框架 WS方式Spring开发 1.建项目,导包. 1 <project xmlns="http://maven.apache.org/POM/4.0.0 ...
- WebService 的CXF框架 WS方式Spring开发
1.建项目,导包. 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://w ...
- MQ原理、使用场景、IBM WebSphere MQ介绍及spring集成配置
一.MQ简介及特点 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们 ...
- Spring - Java/J2EE Application Framework 应用框架 第 13 章 集成表现层
第 13 章 集成表现层 13.1. 简介 Spring之所以出色的一个原因就是将表现层从MVC的框架中分离出来.例如,通过配置就可以让Velocity或者XSLT来代替已经存在的JSP页面.本章介绍 ...
- CXF:是一个开源Service框架支持多种协议:SOAP、XML/HTTP、RestfulHTTP和CORBA,同时可以和Spring集成。
CXF:是一个开源Service框架 支持多种协议:SOAP.XML/HTTP.RestfulHTTP和CORBA,同时可以和Spring集成.
- 系统开发系列 之MyEclipse创建WebService详细教程和调用教程(spring框架+maven+CXF框架)
1 回顾 [系统开发系列 之MyEclipse创建WebService详细教程和调用教程]介绍了使用JWS实现WebService接口的发布和调用,主要涉及的点有: (1)MyEclipse点击Fil ...
- Spring集成MyBatis框架
Spring集成MyBatis框架 Java在写数据库查询时,我接触过四种方式: 1.纯Java代码,引用对应的数据库驱动包,自己写连接与释放逻辑(可以用连接池) 这种模式实际上性能是非常不错的,但是 ...
- Spring集成Shiro框架实战
文章目录 一:什么是Shiro框架 二:Shiro框架简介 1.Shiro基础功能点介绍 2.Shiro的工作原理 3.Shiro的内部工作结构 4.Shiro的身份认证流程 三:Spring集成Sh ...
- Maven项目集成cxf框架发布WebService
关于Maven项目集成cxf框架发布和接收WebService 从网上找了很多,发现大多数都是类似"单机"版的发布,直到看了一篇博客,给我很大的启发. 在此感谢这位博客的作者:ht ...
- 从头开始实现一个小型spring框架——手写Spring之集成Tomcat服务器
手写Spring之集成Tomcat与Servlet 写在前面 一.Web服务模型及servlet 1.1 Web服务器 1.2 请求流程 二.实现 三.小结 写在前面 最近学习了一下spring的相关 ...
最新文章
- float gpu 加速_tensorflow - GPU 加速
- NHibernate1.02使用MsAccess2000Dialect 提供对 Access 数据库的支持
- 2015年百度之星初赛(1) --- B 找连续数
- word2vector 讲的比较好的文章
- 我花 1 分钟写了一段爬虫,帮助小姐姐解放了双手
- 面试题:1 到 1000 之间有多少个 7?
- android,面向对象
- vue组件命名指南,不为取名而纠结
- Debug在中Eclipse的应用
- OpenSSH升级-无需替换旧版本文件
- 【2019西安邀请赛热身赛C:】python算数表达式求值+模拟int溢出
- 浅析《人间失格》中的经典句段
- 2020年10月最新免费加速下载百度网盘文件方法
- vue3 vite版本 引入本地静态图片的方式
- HTML简单语法总结
- Android实现开屏广告(广点通SDK)
- java坦克大战子弹不动_Javase-坦克大战小游戏,为什么会出现上方向和左方向的子弹不能发射的情况?检查了好久,有大佬帮帮忙吗,小白睡不着...
- 基于Java毕业设计志愿者管理系统演示录像2020源码+系统+mysql+lw文档+部署软件
- 关于echart没有数据显示暂无数据
- Jquery ajax, Axios, Fetch区别之我见(转载)