在实践中一直在使用 JAX-WS 构建 WebService 服务,服务还是非常稳定、高效的。

但还是比较好奇其他的 WebService 开源框架,比如:CXF/Axis2/Spring WS等。

源于对 Apache 的信赖和喜爱, 旗下的 CXF WebService 肯定也不会让人失望。

所以花了点时间将 CXF 引入到项目实践当中,多一种选择也未尝不可。

对于 WebService 和 CXF 简介这里就不赘述了,不太懂的同学请先移步:分分钟带你玩转 Web Services【1】JAX-WS

本篇试从 Servlet 发布 CXF WebService 和 Spring 托管 CXF WebService 两种方式,带你玩转 CXF。

需要有这方面实践的同学,请收藏这篇博客,到时只需将 Demo 在本地跑起来,一切就都明朗了。

1. Servlet 发布 CXF WebService

a.mavn 依赖 Jar:

javax.servlet

javax.servlet-api

3.1.0

org.apache.cxf

cxf-rt-frontend-jaxws

3.1.11

org.apache.cxf

cxf-rt-transports-http

3.1.11

依赖的 Jar 基本上都是 sum/apache/codehaus 支持,这些 Jar 已经过岁月洗涤,稳定高效。

b.服务实现:

@WebService

@SOAPBinding(style = SOAPBinding.Style.RPC)

public interface UserService {

/**

* 执行测试的WebService方法(有参)

*/

@WebMethod

String sayHi(@WebParam(name = "name") String name);

}

@WebService

@SOAPBinding(style = SOAPBinding.Style.RPC)

public class UserServiceImpl implements UserService {

@WebMethod

public String sayHi(String name) {

return "Hi, " + name + "! ";

}

}

c.Servlet 实现:

public class WebServicesServlet extends CXFNonSpringServlet {

private static final long serialVersionUID = -5314312869027558456L;

@Override

protected void loadBus(ServletConfig servletConfig) {

super.loadBus(servletConfig);

Endpoint.publish("/UserService", new UserServiceImpl());

}

}

你没有看错 CXF 提供的不集成 Spring 的 Servlet 就叫做 CXFNonSpringServlet,是不是有点俗。

使用起来也很简单,实现 org.apache.cxf.transport.servlet.CXFNonSpringServlet 中的 loadBus 方法即可。

d.web.xml 配置:

cxfwsServlet

com.rambo.cxf.demo.ws.servlet.WebServicesServlet

cxfwsServlet

/ws/*

启动工程,访问:http://localhost:4042/cxf-demo/ws/UserService?wsdl

Servlet 发布 CXF WebService 方式在后续推广使用中发现,部署 weblogic 时会出现错误:

java.lang.IllegalArgumentException: Cannot create URL for this address /XXXXXX

而该错误需要降低 CXF 版本才能顺利解决,这已经违背了我们项目开发的原则。

2. Spring 托管 CXF WebService

a.mavn 依赖 Jar:

org.springframework

spring-web

4.3.7.RELEASE

org.apache.cxf

cxf-rt-frontend-jaxws

3.1.11

org.apache.cxf

cxf-rt-transports-http

3.1.11

只需要依赖 SpringWeb 即可,其中 Spring Context 来托管 WebService 服务的实现类。

服务实现和 web.xml 与 Servlet 发布 是一致的,不需要进行特殊的处理,这里就不贴了。

b. 将 WebService 服务托管给 Spring Context

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:jaxws="http://cxf.apache.org/jaxws"

xsi:schemaLocation=" http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://cxf.apache.org/jaxws

http://cxf.apache.org/schemas/jaxws.xsd">

启动工程,访问:http://localhost:4047/cxf-spring-demo/ws/UserService?wsdl

3. 小结

Servlet 发布 CXF WebService 依赖的开源库较少,也就是说出问题的概率较小;

每次新增 WebService 服务需要修改 WebServicesServlet 类。

Spring Context 托管 WebService 实现类,新增服务类可配置在 cxf-servlet.xml 中;

有优秀的容器替你管理,你会很舒服,大型复杂 WebService 建议配合 Spring 使用。

4. CXF 客户端

当然客户端的使用也有两种方式:

a. 使用工具或者命令行,根据 wsdl 文档生成调用代码,进行调用访问(在上篇中描述过);

b. 配合 spring 进行配置,无需生成客户端代码,交由 spring 统一管理;

serviceClass="com.rambo.cxf.spring.demo.ws.inter.UserService"

address="http://localhost:4047/cxf-spring-demo/ws/UserService">

a 方式被调用方项目不需要添加任何依赖,即可使用客户端代码进行调用访问。

但当服务中涉及交互的安全控制时,还是需要将所依赖添加至项目中,所依赖的 jar 相当庞大。

涉及安全认证时使用 spring 方式配置是最妥当的,引入服务的接口层和相关的依赖即可。

https://www.cnblogs.com/java-class/category/436778.html

java cxf 入口统一_分分钟带你玩转 Web Services【2】CXF相关推荐

  1. @retention注解作用_分分钟带你玩转SpringBoot自定义注解

    在工作中,我们有时候需要将一些公共的功能封装,比如操作日志的存储,防重复提交等等.这些功能有些接口会用到,为了便于其他接口和方法的使用,做成自定义注解,侵入性更低一点.别人用的话直接注解就好.下面就来 ...

  2. 群晖nas介绍文档_手把手带你玩转NAS 篇八:NAS文档随身带——多终端文件同步介绍(群晖drive篇)...

    手把手带你玩转NAS 篇八:NAS文档随身带--多终端文件同步介绍(群晖drive篇) 2020-01-08 15:23:44 24点赞 214收藏 31评论 你是AMD Yes党?还是intel和N ...

  3. ac2100 反弹shell无法粘贴_手把手带你玩转NAS 篇二十一:小米Redmi AC2100路由器刷机padavan保姆级教程...

    手把手带你玩转NAS 篇二十一:小米Redmi AC2100路由器刷机padavan保姆级教程 2020-05-14 18:49:24 224点赞 1790收藏 241评论 你是AMD Yes党?还是 ...

  4. 威联通nas怎么更换大硬盘_手把手带你玩转NAS 篇一:无损转移硬盘数据(威联通篇)TS-453Bmini...

    手把手带你玩转NAS 篇一:无损转移硬盘数据(威联通篇)TS-453Bmini 2019-12-15 11:00:00 51点赞 694收藏 72评论 你是AMD Yes党?还是intel和NVIDI ...

  5. java future 线程 状态_手把手带你了解Java线程的实现方式及生命周期原理

    前言 我们在工作中线程技术很多情况下都能用的到,而且我们在面试的时候,线程技术基本上也是必问的.今天我来从线程的实现方式以及线程的生命周期做一个全面的讲解与分析,帮助大家能更好的去了解线程技术. 概念 ...

  6. mysql筛选字符个数为8的_听说Mysql你很豪横?-------------分分钟带你玩转SQL高级查询语句(常用查询,正则表达式,运算符)...

    一 . 常用查询介绍 1.创建表结构并插入内容 创建一个表 里面有id 毕业院校 家庭住址 name mysql> create table gou(id int primary key,sch ...

  7. java 字节码分析_手把手带你分析Java中的Class字节码文件

    分析Class文件的源码如下: package org.yuequan.klass; public private int m; public int inc(){ return m + 1; } } ...

  8. java thread 线程销毁_手把手带你了解Java线程的实现方式及生命周期原理

    前言 我们在工作中线程技术很多情况下都能用的到,而且我们在面试的时候,线程技术基本上也是必问的.今天我来从线程的实现方式以及线程的生命周期做一个全面的讲解与分析,帮助大家能更好的去了解线程技术. 概念 ...

  9. java小游戏 飞翔的小鸟,校园新手入门,分分钟带你玩转编程

    本课程讲解了飞翔的小鸟游戏的详细编写流程,即使你是刚入门java的新手,只要你简单掌握了该游戏所需要的javase基础知识,便可以跟随教程视频完成属于你自己的飞翔的小鸟游戏!同时还可以加深和巩固你对面 ...

最新文章

  1. mysql数据万能导入工具下载_mysql数据导入工具下载 - 数据导入工具(EMS Data Export for MySQL) v3.7.0多语特别版下载 - 第九软件网...
  2. java double用法_Java Double doubleToLongBits()用法及代码示例
  3. 【LeetCode】分类刷题 之 栈和队列
  4. Python 字符串和列表的转化 ,简单到尖叫
  5. 亚泰盛世携NB物理实验邀你莅临第66届中国教育装备展
  6. 二阶齐次线性微分方程的通解公式_二阶常系数齐次线性微分方程通解
  7. java 源文件存储_JAVA源文件的编写与保存
  8. Android工程中方法数超过65536解决方法
  9. 扫读 | Towards Personalized Federated Learning
  10. 原来我是水瓶座。。。
  11. 大数据与机器学习-大数据预测
  12. 职教平台粉笔科技递交港股IPO招股书:2021年1-9月营收26.3亿
  13. 全平台福利集合大放送!24h后立刻删!冲!
  14. 束手无策 MSN、QQ盗号容易追讨难(转)
  15. Xshell连接以及虚拟机网络设置
  16. 将代码从OPENGL移植到OPENGL ES需要修改什么
  17. Crimewave UVA - 563(最大流)
  18. ScratchJr介绍
  19. hdparm 中文手册
  20. Python之——爬取千千静听(百度音乐)歌曲

热门文章

  1. android7.1.1大小,浅谈Android7.1.1 for 360 N5
  2. tensorrt优化笔记
  3. Python忽略Warning输出
  4. vs2015 Preprocessor
  5. PyTorch中如何使用tensorboard可视化
  6. python 多维数组删除重复
  7. win10+VS2015+pycaffe编译
  8. django ajax传参数
  9. laravel5.0升级到5.1
  10. ios视频硬解异常总结,12911总结