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集成相关推荐

  1. 转载 WebService 的CXF框架 WS方式Spring开发

    WebService 的CXF框架 WS方式Spring开发 1.建项目,导包. 1 <project xmlns="http://maven.apache.org/POM/4.0.0 ...

  2. WebService 的CXF框架 WS方式Spring开发

    1.建项目,导包. 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://w ...

  3. MQ原理、使用场景、IBM WebSphere MQ介绍及spring集成配置

    一.MQ简介及特点 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们 ...

  4. Spring - Java/J2EE Application Framework 应用框架 第 13 章 集成表现层

    第 13 章 集成表现层 13.1. 简介 Spring之所以出色的一个原因就是将表现层从MVC的框架中分离出来.例如,通过配置就可以让Velocity或者XSLT来代替已经存在的JSP页面.本章介绍 ...

  5. CXF:是一个开源Service框架支持多种协议:SOAP、XML/HTTP、RestfulHTTP和CORBA,同时可以和Spring集成。

    CXF:是一个开源Service框架 支持多种协议:SOAP.XML/HTTP.RestfulHTTP和CORBA,同时可以和Spring集成.

  6. 系统开发系列 之MyEclipse创建WebService详细教程和调用教程(spring框架+maven+CXF框架)

    1 回顾 [系统开发系列 之MyEclipse创建WebService详细教程和调用教程]介绍了使用JWS实现WebService接口的发布和调用,主要涉及的点有: (1)MyEclipse点击Fil ...

  7. Spring集成MyBatis框架

    Spring集成MyBatis框架 Java在写数据库查询时,我接触过四种方式: 1.纯Java代码,引用对应的数据库驱动包,自己写连接与释放逻辑(可以用连接池) 这种模式实际上性能是非常不错的,但是 ...

  8. Spring集成Shiro框架实战

    文章目录 一:什么是Shiro框架 二:Shiro框架简介 1.Shiro基础功能点介绍 2.Shiro的工作原理 3.Shiro的内部工作结构 4.Shiro的身份认证流程 三:Spring集成Sh ...

  9. Maven项目集成cxf框架发布WebService

    关于Maven项目集成cxf框架发布和接收WebService 从网上找了很多,发现大多数都是类似"单机"版的发布,直到看了一篇博客,给我很大的启发. 在此感谢这位博客的作者:ht ...

  10. 从头开始实现一个小型spring框架——手写Spring之集成Tomcat服务器

    手写Spring之集成Tomcat与Servlet 写在前面 一.Web服务模型及servlet 1.1 Web服务器 1.2 请求流程 二.实现 三.小结 写在前面 最近学习了一下spring的相关 ...

最新文章

  1. float gpu 加速_tensorflow - GPU 加速
  2. NHibernate1.02使用MsAccess2000Dialect 提供对 Access 数据库的支持
  3. 2015年百度之星初赛(1) --- B 找连续数
  4. word2vector 讲的比较好的文章
  5. 我花 1 分钟写了一段爬虫,帮助小姐姐解放了双手
  6. 面试题:1 到 1000 之间有多少个 7?
  7. android,面向对象
  8. vue组件命名指南,不为取名而纠结
  9. Debug在中Eclipse的应用
  10. OpenSSH升级-无需替换旧版本文件
  11. 【2019西安邀请赛热身赛C:】python算数表达式求值+模拟int溢出
  12. 浅析《人间失格》中的经典句段
  13. 2020年10月最新免费加速下载百度网盘文件方法
  14. vue3 vite版本 引入本地静态图片的方式
  15. HTML简单语法总结
  16. Android实现开屏广告(广点通SDK)
  17. java坦克大战子弹不动_Javase-坦克大战小游戏,为什么会出现上方向和左方向的子弹不能发射的情况?检查了好久,有大佬帮帮忙吗,小白睡不着...
  18. 基于Java毕业设计志愿者管理系统演示录像2020源码+系统+mysql+lw文档+部署软件
  19. 关于echart没有数据显示暂无数据
  20. Jquery ajax, Axios, Fetch区别之我见(转载)

热门文章

  1. duet设置_Duet Display 使用体验 - iPad 变身扩展屏幕
  2. 谷粒商城-个人笔记(基础篇一)
  3. jsp入门配置Tomcat
  4. 内存引起的蓝屏问题排查
  5. 月神带你逻辑漏洞挖掘
  6. mac 安装 PyAudio
  7. 数据结构实验C语言实现版
  8. Cisco Packet Tracer 6.2 安装教程 | 计算机网络
  9. 梅特勒托利多电子秤显示EEP服务器错误,梅特勒-托利多电子天平常见故障的解决方法...
  10. ORL、Yale等人脸数据库百度云链接