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

Java19下用Maven CXF插件生成WSDL代码遇HexBinaryAdapter缺失错误

Java 19下使用CXF Codegen Plugin生成WSDL代码:解决HexBinaryAdapter缺失问题

问题详情

在Java 19环境中使用Apache CXF的cxf-codegen-plugin(3.5.4版本)生成WSDL代码时,触发类缺失错误:

[ERROR] Failed to execute goal org.apache.cxf:cxf-codegen-plugin:3.5.4:wsdl2java (default) on project customsx: Execution default of goal org.apache.cxf:cxf-codegen-plugin:3.5.4:wsdl2java failed: A required class was missing while executing org.apache.cxf:cxf-codegen-plugin:3.5.4:wsdl2java: javax/xml/bind/annotation/adapters/HexBinaryAdapter

当前插件配置如下:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>3.5.4</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>${basedir}/src/main/wsdl/sample.wsdl</wsdl>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>4.0.1</version>
        </dependency>

        <!--dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>4.0.1</version>
        </dependency-->
    </dependencies>
</plugin>

未添加Jakarta依赖时会报javax.xml.bind.annotation缺失,添加后又出现HexBinaryAdapter缺失,需在保留Java 19的前提下解决该问题。

可行解决方案

方案1:升级CXF插件到支持Jakarta EE 9+的版本

CXF 3.5.x默认依赖JAXB的javax包,而Java 19已完全移除这些API,Jakarta EE 9+已将包名迁移至jakarta.xml.bind。升级到CXF 4.x版本(原生支持Jakarta EE 9+)可彻底解决问题:

修改插件配置如下:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <!-- 使用CXF 4.x版本,示例为4.0.0 -->
    <version>4.0.0</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>${basedir}/src/main/wsdl/sample.wsdl</wsdl>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>4.0.1</version>
        </dependency>
    </dependencies>
</plugin>

方案2:为CXF 3.5.x添加JAXB javax兼容核心包

若无法升级CXF版本,可添加包含HexBinaryAdapter类的jaxb-core包,补充插件运行时缺失的javax类:

修改插件依赖部分:

<dependencies>
    <!-- 添加JAXB javax核心包,提供HexBinaryAdapter -->
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>2.3.0.1</version>
    </dependency>
    <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>4.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>4.0.1</version>
    </dependency>
</dependencies>

方案3:添加--jakarta参数生成Jakarta命名空间代码(CXF 3.5.3+支持)

CXF 3.5.3及以上版本支持--jakarta参数,可直接生成使用jakarta.xml.bind命名空间的代码,避免依赖javax包:

在插件配置中添加参数:

<configuration>
    <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
    <wsdlOptions>
        <wsdlOption>
            <wsdl>${basedir}/src/main/wsdl/sample.wsdl</wsdl>
            <!-- 添加Jakarta参数 -->
            <additionalArgs>
                <additionalArg>--jakarta</additionalArg>
            </additionalArgs>
        </wsdlOption>
    </wsdlOptions>
</configuration>

保持现有Jakarta依赖不变即可正常生成代码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:01:39