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

迁移至Java21与JAXB3后,从WSDL生成类时出现jxb前缀未绑定异常如何解决?

解决Java21+JAXB3迁移中jaxb-maven-plugin生成类的SAXParseException异常

问题场景

从Java8(JAXB2)迁移到Java21(JAXB3)后,使用jaxb-maven-plugin从WSDL生成Java类时,触发org.xml.sax.SAXParseException异常,错误信息为:

元素jxb:bindings的前缀jxb未绑定

导致Maven构建直接失败。

旧配置参考

旧xjb绑定文件头部

<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1">
    <!-- 自定义绑定规则 -->
</jxb:bindings>

旧Maven插件配置

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb-maven-plugin</artifactId>
    <version>2.5.0</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <wsdlFiles>
                    <wsdlFile>src/main/resources/your-service.wsdl</wsdlFile>
                </wsdlFiles>
                <bindingFiles>
                    <bindingFile>src/main/resources/bindings.xjb</bindingFile>
                </bindingFiles>
            </configuration>
        </execution>
    </executions>
</plugin>

解决方案

1. 更新xjb绑定文件的命名空间与版本

JAXB3属于Jakarta EE生态,命名空间已从原Sun的地址迁移到Jakarta官方地址,同时版本号需对应3.0。修改xjb文件头部如下:

<jxb:bindings xmlns:jxb="https://jakarta.ee/xml/ns/jaxb" version="3.0">
    <!-- 原有自定义绑定规则保持不变 -->
</jxb:bindings>

这一步是解决“前缀jxb未绑定”的核心——旧命名空间在JAXB3环境下无法被插件识别,导致前缀绑定失败。

2. 升级Maven插件并添加jaxb-basics依赖

旧的org.codehaus.mojo版本jaxb-maven-plugin不支持JAXB3,需替换为org.jvnet.jaxb.maven2的适配版本,同时添加jaxb-basics-annotate插件处理注解绑定(JAXB3移除了部分旧API,需要该插件补充):

<plugin>
    <groupId>org.jvnet.jaxb.maven2</groupId>
    <artifactId>jaxb-maven-plugin</artifactId>
    <version>3.0.2</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <wsdlFiles>
                    <wsdlFile>src/main/resources/your-service.wsdl</wsdlFile>
                </wsdlFiles>
                <bindingFiles>
                    <bindingFile>src/main/resources/bindings.xjb</bindingFile>
                </bindingFiles>
                <!-- 开启扩展以加载jaxb-basics插件 -->
                <extension>true</extension>
                <args>
                    <arg>-Xannotate</arg>
                </args>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.jvnet.jaxb2_commons</groupId>
                    <artifactId>jaxb2-basics-annotate</artifactId>
                    <version>1.1.0</version>
                </dependency>
                <dependency>
                    <groupId>org.jvnet.jaxb2_commons</groupId>
                    <artifactId>jaxb2-basics</artifactId>
                    <version>1.11.1</version>
                </dependency>
            </dependencies>
        </execution>
    </executions>
    <!-- 引入JAXB3核心依赖 -->
    <dependencies>
        <dependency>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>3.0.1</version>
        </dependency>
    </dependencies>
</plugin>

完成以上两步后,重新执行Maven构建即可成功生成JAXB3兼容的Java类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:05:19