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

升级Jakarta JAXB后继承命名空间不支持问题求助

Jakarta JAXB 3.x 继承插件配置问题解决

问题背景

将XSD转换为Java文件,升级至Jakarta JAXB后,配置继承扩展时遇到命名空间不支持的报错。

现有配置

XJB绑定文件配置

<jaxb:bindings version="3.0"
xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
jaxb:extensionBindingPrefixes="inheritance">
<jaxb:globalBindings>
<xjc:simple />
<jaxb:javaType name="java.lang.String" xmlType="xs:date" />
<jaxb:javaType name="java.lang.String" xmlType="xs:time" />
<jaxb:serializable />
</jaxb:globalBindings>
<jaxb:bindings schemaLocation="&xsdPath;/sample.xsd">
<jaxb:bindings node="//xs:element[@name='sampleRequest']/xs:complexType">
<inheritance:implements>&baseRequest;</inheritance:implements>
</jaxb:bindings>
<jaxb:bindings node="//xs:element[@name='sampleResponse']/xs:complexType">
<inheritance:implements>&baseResponse;</inheritance:implements>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>

Maven插件配置

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>xjc</id>
<goals><goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<args>
<arg>-Xinject-code</arg>
<arg>-Xinheritance</arg>
<arg>-XautoNameResolution</arg>
</args>
<dependencies>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>4.0.3</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>4.0.3</version>
</dependency>
</dependencies>
<xjbSources>
<xjbSource>src/main/resources/schema/xjb/MyJaxbBindings.xjb</xjbSource>
</xjbSources>
<sources>
<source>src/main/resources/schema/xsd</source>
</sources>
<packageName>com.demo.generated.model</packageName>
<outputDirectory>${project.build.directory}/generated-sources/jaxb</outputDirectory>
<clearOutputDir>false</clearOutputDir>
<noGeneratedHeaderComments>true</noGeneratedHeaderComments>
<extension>true</extension>
<generateEpisode>false</generateEpisode>
</configuration>
</plugin>

报错现象

  1. 初始构建报错:

"Unsupported binding namespace http://jaxb2-commons.dev.java.net/basic/inheritance. Perhaps you meant http://jaxb.dev.java.net/plugin/code-injector?"

  1. 错误替换命名空间后,再次报错:

"Using http://jaxb.dev.java.net/plugin/code-injector customizations requires the "-Xinject-code" switch to enable this plug-in."

解决步骤

1. 补充继承插件依赖

在Maven插件的<dependencies>节点中添加适配Jakarta JAXB 3.x的继承扩展包:

<dependency>
    <groupId>org.jvnet.jaxb2_commons</groupId>
    <artifactId>jaxb2-basics</artifactId>
    <version>1.12.0</version>
</dependency>
<dependency>
    <groupId>org.jvnet.jaxb2_commons</groupId>
    <artifactId>jaxb2-basics-tools</artifactId>
    <version>1.12.0</version>
</dependency>

2. 恢复XJB文件的正确命名空间

将XJB文件中inheritance的命名空间恢复为http://jaxb2-commons.dev.java.net/basic/inheritance,无需替换为代码注入插件的命名空间——两者属于不同扩展,不能混用。

3. 重新执行构建

保持Maven插件<args>中的-Xinheritance参数不变,执行mvn clean compile即可正常生成带有继承实现的Java类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:44:53