You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jakarta+Maven生成WSDL Stub遇阻,求排查及Apache Axis方案

从WSDL生成Jakarta风格Java文件:问题排查、替代方案与Apache Axis指南

问题背景

使用Java 20,计划基于WSDL文件生成Jakarta规范的Java WebService客户端代码。已引入jakarta.xml.ws-api依赖,并配置jaxws-maven-plugin执行wsimport目标,但执行mvn clean install后未生成预期的Java文件,同时对<sourceDestDir>和<packageName>的配置存在疑问。

一、当前配置的问题排查

1. 路径配置错误

你的<wsdlDirectory>和<sourceDestDir>使用了非标准相对路径,Maven无法正确识别(正确路径需基于项目根目录)。建议改用Maven内置变量${project.basedir}指定路径:

<wsdlDirectory>${project.basedir}/src/main/resources/</wsdlDirectory>
<sourceDestDir>${project.basedir}/target/generated-sources/jaxws</sourceDestDir>

推荐将生成代码输出到target/generated-sources目录,避免把自动生成的代码提交到版本控制系统。

2. 缺少JAX-WS实现依赖

jakarta.xml.ws-api仅为API规范,无具体实现。jaxws-maven-plugin需要依赖JAX-WS运行时库才能正常工作,需在插件中添加依赖:

<plugin>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>4.0.1</version>
    <dependencies>
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-rt</artifactId>
            <version>4.0.1</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
    <!-- 其他配置 -->
</plugin>

3. 执行命令排查日志

单独执行mvn jaxws:wsimport,查看控制台日志,是否有找不到WSDL文件、权限不足或语法错误等提示,这些信息可直接定位问题。

4. <packageName>与<sourceDestDir>说明

  • <packageName>:指定生成Java类的包名,例如你配置的com.omo.robi.ThirdpartyRequest.webservice,生成的类会放在该包路径下。
  • <sourceDestDir>:指定生成Java文件的根目录,结合<packageName>,最终文件路径为${sourceDestDir}/com/omo/robi/ThirdpartyRequest/webservice/。

二、修正后的完整插件配置

<plugin>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>4.0.1</version>
    <dependencies>
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-rt</artifactId>
            <version>4.0.1</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <goals>
                <goal>wsimport</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <wsdlDirectory>${project.basedir}/src/main/resources/</wsdlDirectory>
        <wsdlFiles>
            <wsdlFile>hexingws.wsdl</wsdlFile>
        </wsdlFiles>
        <packageName>com.omo.robi.ThirdpartyRequest.webservice</packageName>
        <sourceDestDir>${project.basedir}/target/generated-sources/jaxws</sourceDestDir>
        <!-- 自动将生成目录加入编译路径 -->
        <sourceRoot>${project.basedir}/target/generated-sources/jaxws</sourceRoot>
    </configuration>
</plugin>

添加<sourceRoot>可让Maven自动把生成的代码目录加入编译路径,无需手动配置。

三、其他实现方法:Apache CXF插件

Apache CXF是主流WebService框架,支持Jakarta规范,配置步骤如下:

  1. 添加CXF依赖
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>4.0.2</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>4.0.2</version>
</dependency>
  1. 配置cxf-codegen-plugin
<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>4.0.2</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
            <configuration>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>${project.basedir}/src/main/resources/hexingws.wsdl</wsdl>
                        <extraargs>
                            <extraarg>-p</extraarg>
                            <extraarg>com.omo.robi.ThirdpartyRequest.webservice</extraarg>
                        </extraargs>
                    </wsdlOption>
                </wsdlOptions>
                <sourceRoot>${project.basedir}/target/generated-sources/cxf</sourceRoot>
            </configuration>
        </execution>
    </executions>
</plugin>
  1. 执行mvn clean install,生成的代码会在target/generated-sources/cxf目录下。

四、使用Apache Axis2生成代码(支持Jakarta)

Apache Axis2也可生成符合Jakarta规范的WebService代码,步骤如下:

1. 添加Axis2依赖

<dependency>
    <groupId>org.apache.axis2</groupId>
    <artifactId>axis2-jaxws</artifactId>
    <version>1.8.2</version>
</dependency>

2. 配置axis2-wsdl2code-maven-plugin

<plugin>
    <groupId>org.apache.axis2</groupId>
    <artifactId>axis2-wsdl2code-maven-plugin</artifactId>
    <version>1.8.2</version>
    <executions>
        <execution>
            <goals>
                <goal>wsdl2code</goal>
            </goals>
            <configuration>
                <wsdlFile>${project.basedir}/src/main/resources/hexingws.wsdl</wsdlFile>
                <packageName>com.omo.robi.ThirdpartyRequest.webservice</packageName>
                <outputDirectory>${project.basedir}/target/generated-sources/axis2</outputDirectory>
                <databindingName>jaxb</databindingName>
                <language>java</language>
            </configuration>
        </execution>
    </executions>
</plugin>

3. 执行生成命令

运行mvn axis2:wsdl2code,生成的代码会输出到指定的outputDirectory中。


内容的提问来源于stack exchange,提问作者Hashini Udara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:26:19