博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分分钟带你玩转 Web Services【2】CXF
阅读量:7110 次
发布时间:2019-06-28

本文共 3813 字,大约阅读时间需要 12 分钟。

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

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

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

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

   对于 WebService 和 CXF 简介这里就不赘述了,不太懂的同学请先移步:

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

   Servlet 发布 CXF WebService git demo地址:

   Spring 托管 CXF WebService git demo地址: 

   需要有这方面实践的同学,请收藏这篇博客,到时只需将 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 

   启动工程,访问: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  统一管理;

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

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

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

本文转自Orson博客园博客,原文链接:http://www.cnblogs.com/java-class/p/6752128.html,如需转载请自行联系原作者

你可能感兴趣的文章
java内存管理
查看>>
每天一个linux命令(13):less 命令
查看>>
实现文件复制命令
查看>>
程序计时
查看>>
进程管理工具Supervisor的安装及使用
查看>>
搭建渗透测试环境选自KaliLinux无线网络渗透测试教程
查看>>
iOS开发中一些有用的小代码
查看>>
Centos7下安装mongodb
查看>>
ES架构及原理
查看>>
利用jenkins进行持续集成和持续部署
查看>>
Windows7 自动更新时遇到故障
查看>>
我的友情链接
查看>>
spring加载配置属性文件(properties)
查看>>
redis设置
查看>>
android的唯一性
查看>>
深入理解java虚拟机——OutOfMemoryError异常
查看>>
《The way to go》中文版
查看>>
上万个任务让你hold不住?
查看>>
jQuery设置元素是否显示
查看>>
MySQL数据库的基本概述和基本应用
查看>>