java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Springboot CXF进行WSDL转换及WebService调用

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

作者:筱诗诗

本文介绍如何利用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 服务开发和集成。

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

您可能感兴趣的文章:
阅读全文