[webservice] springboot整合cxf

这篇具有很好参考价值的文章主要介绍了[webservice] springboot整合cxf。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. cxf是什么

    Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序。Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。
    CXF,Apache CXF = Celtix +XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF,继承了 Celtix 和 XFire 两大开源项目的精华,提供了对JAX-WS全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache顶级项目。

2. springboot整合cxf的操作(server端发布)

2.1 pom.xml 中添加依赖

springboot整合Apache cxf

       <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
                <version>3.5.7</version>
                <exclusions><!-- CXF uses java.util.logging by default -->
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web-services</artifactId>
                <version>2.3.12.RELEASE</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.sun.xml.bind</groupId>
                        <artifactId>jaxb-impl</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>


            <dependency>
                <groupId>org.dom4j</groupId>
                <artifactId>dom4j</artifactId>
                <version>2.1.3</version>
            </dependency>
            <!-- dom4j解析xpath依赖 -->
            <dependency>
                <groupId>jaxen</groupId>
                <artifactId>jaxen</artifactId>
                <version>2.0.0</version>
            </dependency>

2.2 编写server端

@Service
// 配置targetNamespace和服务名称
@WebService(targetNamespace = "ws.yening.gitee.com", name = "MedicalOrderSvc")
public class MedicalOrderService {
   // 配置service中的method
    @WebMethod(operationName = "medicationOrderRequest",action="/medicationOrderRequest")
    @WebResult
    // 使用WebParam配置参数名称,不配置的话默认会是arg0之类的名称
    public R medicationOrderRequest(@WebParam(name = "message") String message) { 
      return null;
    }
}

2.3 service发布(cxf配置)

@Configuration
@EnableWs
public class CxfConfig {


    /**
     * 注意:此方法被注释后WSDL访问地址是http://127.0.0.1:8080/services/helloService?wsdl
     * 放开注释后WSDL访问地址是:http://127.0.0.1:8080/ws/helloService?wsdl
     */
    @Bean
    public ServletRegistrationBean wsServletConfig() {
        return new ServletRegistrationBean(new CXFServlet(), "/ws/*");
    }

    @Resource
    private MedicalOrderService medicalOrderService;
    // 对于多个发布的service,可以写多个bean来实现
    @Bean
    public Endpoint orderEndpoint() {
        return formatEndpoint("/medicalOrderService", medicalOrderService);
    }


    /**
     * 格式化暴漏的ws接口信息
     *
     * @param path  暴露的ws请求地址
     * @param svc   与地址对应的ws服务
     * @return
     */
    @Resource
    Bus bus;

    private Endpoint formatEndpoint(String path, Object svc) {
        EndpointImpl endpoint = new EndpointImpl(bus, svc);
        endpoint.publish(path);
        return endpoint;
    }
}

发布完成后启动web服务,可以通过:http://127.0.0.1:8080/ws 访问已经发布的服务。
在这里分享一个天气预报的webservice服务:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

3. webservice使用(client端调用)

3.1 使用wsdl2java生成webservice客户端代码

将目录切换到下载的apache-cxf-版本文件包的bin目录下,然后执行如下命令wsdl2java -p com.vh -d /Users/johnny/Desktop/aa -client http://127.0.0.1:8083/ws/medicalOrderService?wsdl

  • -p:指定生成的Java代码的package
  • -d:指定生产的文件的根目录
  • -client 指定线上或本地的wsdl文件,用于生成客户端代码

3.2 使用

   @DisplayName("临时测试使用")
    @Test
    public void test1() {
        MedicalOrderServiceService svc = new MedicalOrderServiceService();
        svc.getMedicalOrderSvcPort().medicationOrderRequest(message);
    }

3.3 xpath说明

对于XML文档的读取来说,xpath几乎是通常的选择,而在使用webservice时通常伴随着对于XML文档的解析。
xpath常用规则(其它规则可以参考文档:https://blog.csdn.net/qq_44619675/article/details/113938171)文章来源地址https://www.toymoban.com/news/detail-857766.html

表达式 描述
nodename 选取此节点的所有子节点
/ 从根节点选取直接子节点(相当于绝对路径)
// 从当前节点选择子节点(相当于相对路径)
. 选取当前节点
选取当前节点的父节点
@ 选取属性
以上面天气预报为例使用dom4j+xpath读取第一个方法的描述
@Test
    @DisplayName("读取天气预报wsdl第一个方法的描述")
    public void test2() throws IOException, DocumentException {
        URL url = new URL("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl");
        URLConnection conn = url.openConnection();
        SAXReader saxReader = new SAXReader();
        Document doc = saxReader.read(conn.getInputStream());
        Node node = doc.selectSingleNode("/wsdl:definitions/wsdl:portType[@name=\"WeatherWebServiceSoap\"]/wsdl:operation[@name=\"getSupportCity\"]/wsdl:documentation");
        System.out.println(node.getText());
    }

4. 参考文档

  • https://cxf.apache.org/docs/index.html
  • https://baike.baidu.com/item/Web%20Service/1215039?fr=ge_ala
  • https://blog.csdn.net/qq_44619675/article/details/113938171

到了这里,关于[webservice] springboot整合cxf的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring security - 快速整合 springboot

    2024年02月10日
    浏览(43)
  • Spring Security入门教程,springboot整合Spring Security

    Spring Security是Spring官方推荐的认证、授权框架,功能相比Apache Shiro功能更丰富也更强大,但是使用起来更麻烦。 如果使用过Apache Shiro,学习Spring Security会比较简单一点,两种框架有很多相似的地方。 目录 一、准备工作 创建springboot项目 pom.xml application.yml 二、创建相关的类

    2024年02月05日
    浏览(49)
  • 【RabbitMQ】4 Spring/SpringBoot整合RabbitMQ

    spring-amqp 是对AMQP的一些概念的一些抽象, spring-rabbit 是对RabbitMQ操作的封装实现。 主要有几个核心类 RabbitAdmin 、 RabbitTemplate 、 SimpleMessageListenerContainer 等。 RabbitAdmin 类完成对Exchange,Queue,Binding的操作,在容器中管理了 RabbitAdmin 类的时候,可以对Exchange,Queue,Binding进行自

    2024年01月22日
    浏览(41)
  • SpringBoot整合Spring Security实现权限控制

    要对Web资源进行保护,最好的办法莫过于Filter 要想对方法调用进行保护,最好的办法莫过于AOP。 Spring Security进行认证和鉴权的时候,就是利用的一系列的Filter来进行拦截的。 如图所示,一个请求想要访问到API就会从左到右经过蓝线框里的过滤器,其中 绿色部分是负责认证的

    2024年02月15日
    浏览(35)
  • 消息队列——spring和springboot整合rabbitmq

    目录 spring整合rabbitmq——生产者 rabbitmq配置文件信息 倒入生产者工程的相关代码 简单工作模式 spring整合rabbitmq——消费者 spring整合rabbitmq——配置详解 SpringBoot整合RabbitMQ——生产者  SpringBoot整合RabbitMQ——消费者   使用原生amqp来写应该已经没有这样的公司了 创建两个工程

    2024年02月16日
    浏览(51)
  • Springboot 实践(13)spring boot 整合RabbitMq

    前文讲解了RabbitMQ的下载和安装,此文讲解springboot整合RabbitMq实现消息的发送和消费。 1、创建web project项目,名称为“SpringbootAction-RabbitMQ” 2、修改pom.xml文件,添加amqp使用jar包    !--  RabbitMQ --         dependency             groupIdorg.springframework.boot/groupId         

    2024年02月09日
    浏览(56)
  • 【Spring】SpringBoot整合MybatisPlusGernerator,MybatisPlus逆向工程

       📝个人主页:哈__ 期待您的关注  在我们写项目的时候,我们时常会因为需要创建很多的项目结构而头疼。项目中的表很多的时候,我们连实体类都创建不完,这时候就需要我们的逆向工程来帮助我们生成我们的框架结构。这些结构都差不多,实体类,表现层,业务层和

    2024年04月15日
    浏览(46)
  • springboot整合spring cloud gateway搭建网关服务

    spring cloud netflix zuul、spring cloud gateway是最常见的微服务网关,通过网关,我们可以在请求到达后端指定服务之前/后端服务处理完业务响应数据之后对响应进行对请求/响应进行处理。 比如常见的参数校验、接口鉴权等等,在后端服务的拦截器和过滤器能做的事在网关都可以做

    2024年02月07日
    浏览(50)
  • springboot(spring)整合redis(集群)、细节、底层配置讲解

    1.引入依赖.      其实springboot整合其他主流框架直接在后面加上名称即可,比如spring-boot-starter-redis,然后就直接可以用,可以直接注入了.      主要原因大概就是springboot框架已经包含了自动注入的功能,对于每一个引入的主要jar包(包含starter),都有一个factory的配置文件,里面配置

    2024年02月09日
    浏览(69)
  • Spring Authorization Server入门 (二) springboot整合Spring Authorization Server

    在新版本的sas(1.2.1)中获取token更新了授权码校验逻辑,只能用form-data传递参数,使用url-params会失败,原因见issue1451 对应的 commit 在这里: Fix to ensure endpoints distinguish between form and query parameters 文章较长,步骤比较繁琐,请各位读者耐心观看。 上篇文章大概了解了下框架的相关

    2024年02月13日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包