Springboot使用CXF进行WSDL转换及WebService服务调用过程

 更新时间:2025年09月24日 10:00:49   作者:筱诗诗  
本文介绍如何利用Apache CXF将WSDL转换为Java代码,提供bat命令和Maven插件两种方法,并详解生成类的属性(如name、targetNamespace)及调用接口的参数传递方式,助力高效集成Web服务

在开发过程中,对接比较老的系统经常需要将 WSDL 文件转换为 Java 代码以便与 Web 服务进行交互。Apache CXF 提供了便捷的方式来完成这一任务。

本文将详细介绍如何使用 CXF 添加相关依赖,并通过两种方法将 WSDL 文件转换为 Java 代码。最后,我们将展示如何调用生成的 WebService 服务接口。

1.添加依赖

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
    <version>3.5.8</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>3.5.8</version>
</dependency>

2.wsdl转java代码,这有两种方式

第一种,使用bat命令转换

wsimport -keep http://10.1.1.1:8080/webservice/111/service/webservice?wsdl

第二种,使用maven插件实现(版本尽量和cxf依赖版本一致)

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>3.5.8</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>src/main/resources/cxf</sourceRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>http://10.1.1.1:8080/webservice/111/service/webservice?wsdl</wsdl>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

wsdl为这种格式,类似接口文档

转换为下图这种(其中get set都是方法)

3.这是转换后的webService类

其中name是Web Service的本地名称,targetNamespace指定了Web Service的目标命名空间,wsdlLocation指定了WSDL文档的位置,serviceName是WSDL中定义的服务的名称,portName指定了WSDL中定义的端口的名称。

@WebServiceClient(name = "webservice", targetNamespace = "http://service.xxx", wsdlLocation = "http://10.1.1.1:8080/webservice/111/service/webservice?wsdl")
public class Webservice
    extends Service
{

    private final static URL WEBSERVICE_WSDL_LOCATION;
    private final static WebServiceException WEBSERVICE_EXCEPTION;
    private final static QName WEBSERVICE_QNAME = new QName("http://service.xxx", "webservice");

    static {
        URL url = null;
        WebServiceException e = null;
        try {
            url = new URL("http://10.1.1.1:8080/webservice/111/service/webservice?wsdl");
        } catch (MalformedURLException ex) {
            e = new WebServiceException(ex);
        }
        WEBSERVICE_WSDL_LOCATION = url;
        WEBSERVICE_EXCEPTION = e;
    }

    public Webservice() {
        super(__getWsdlLocation(), WEBSERVICE_QNAME);
    }

4.我们需要使用webService去调用getWebserviceHttpPort这个方法

找到要调用的方法名,把参数传进去(name,password,data),data是要传输的数据

Webservice webservice = new Webservice();
WebservicePortType port = webservice.getWebserviceHttpPort();
String result = port.setHtInfo(checCmdUsername, checCmdPassword, data);
System.out.println("result: " + result);
if(result.contains("成功")){
    log.info("---------------同步成功!---------------");
    return true;
}else {
    log.info("---------------同步失败!---------------");
    return false;
}

通过上述步骤,我们可以轻松地将 WSDL 文件转换为 Java 代码,并使用生成的类调用 Web 服务接口。

无论是通过批处理命令还是使用 Maven 插件,CXF 都提供了灵活且强大的工具来简化这一过程。

总结

希望本文能帮助你在实际项目中更高效地进行 Web 服务开发和集成。

以上为个人经验,给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Android中的LinearLayout布局

    Android中的LinearLayout布局

    在一般情况下,当有很多控件需要在一个界面列出来时,我们就可以使用线性布局(LinearLayout)了,线性布局是按照垂直方向(vertical)或水平方向(horizontal)的顺序依次排序子元素,每一个子元素都位于前一个元素之后,下面我们就简单的了解一下吧
    2017-01-01
  • 如何把本地idea上的项目上传到github上(推荐)

    如何把本地idea上的项目上传到github上(推荐)

    这篇文章主要介绍了如何把本地idea上的项目上传到github上,本文通过图文的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • SpringCloud通过MDC实现分布式链路追踪

    SpringCloud通过MDC实现分布式链路追踪

    在DDD领域驱动设计中,我们使用SpringCloud来去实现,但排查错误的时候,通常会想到Skywalking,但是引入一个新的服务,增加了系统消耗和管理学习成本,对于大型项目比较适合,但是小的项目显得太过臃肿了,所以本文介绍了SpringCloud通过MDC实现分布式链路追踪
    2024-11-11
  • 详解Java中Dijkstra(迪杰斯特拉)算法的图解与实现

    详解Java中Dijkstra(迪杰斯特拉)算法的图解与实现

    Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。本文将详解该算法的图解与实现,需要的可以参考一下
    2022-05-05
  • Java SE循环一些基本练习题总结

    Java SE循环一些基本练习题总结

    循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,下面这篇文章主要给大家总结介绍了关于Java SE循环一些基本练习题,需要的朋友可以参考下
    2024-03-03
  • springbean的加载过程及应用场景分析

    springbean的加载过程及应用场景分析

    Bean已经被实例化、属性注入、初始化,并且注册到容器中,可以被其他Bean或应用程序使用,这篇文章主要介绍了springbean的加载过程以及应用场景,需要的朋友可以参考下
    2024-04-04
  • Java文件处理之使用XWPFDocument导出Word文档

    Java文件处理之使用XWPFDocument导出Word文档

    最近因项目开发的需要,整理了一份用JAVA导出WORD文档,下面这篇文章主要给大家介绍了关于Java文件处理之使用XWPFDocument导出Word文档的相关资料,需要的朋友可以参考下
    2023-12-12
  • Java简单实现农夫过河问题示例

    Java简单实现农夫过河问题示例

    这篇文章主要介绍了Java简单实现农夫过河问题,简单描述了农夫过河问题的概念、原理并结合简单实例形式分析了java解决农夫过河问题的相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • SpringBoot如何实现Tomcat自动配置

    SpringBoot如何实现Tomcat自动配置

    这篇文章主要介绍了SpringBoot如何实现Tomcat自动配置,帮助大家更好的理解和学习使用SpringBoot框架,感兴趣的朋友可以了解下
    2021-03-03
  • java 将一个数组逆序输出的方法

    java 将一个数组逆序输出的方法

    今天小编就为大家分享一篇java 将一个数组逆序输出的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06

最新评论