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

使用jaxb2-maven-plugin生成实现接口的类,正确命名空间是什么?

解决jaxb2-maven-plugin 3.x生成类实现自定义接口的问题

你遇到的报错是因为http://jaxb2-commons.dev.java.net/basic/inheritance是针对旧版JAXB 2.x的jaxb2-commons扩展命名空间,和你使用的基于Jakarta XML Binding 3.0的jaxb2-maven-plugin 3.1.0不兼容。下面提供两种可行的解决方案:

方案一:使用code-injector扩展注入接口实现

你之前对code-injector的理解有误,它不仅能添加自定义代码片段,还可以直接注入类的implements声明,完全满足你的需求。

修改bindings.xjb文件

替换原有命名空间,使用code-injector的命名空间并添加代码注入标签:

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb"
               xmlns:xs="http://www.w3.org/2001/XMLSchema"
               xmlns:code="http://jaxb.dev.java.net/plugin/code-injector"
               jaxb:extensionBindingPrefixes="code"
               version="3.0">

    <jaxb:bindings schemaLocation="application.xsd" node="/xs:schema">
        <jaxb:bindings node="//xs:complexType[@name='applicationType']">
            <code:code>implements com.example.SomeInterface</code:code>
        </jaxb:bindings>
    </jaxb:bindings>

</jaxb:bindings>

配置maven插件依赖

在jaxb2-maven-plugin的配置中添加code-injector所需的依赖,确保插件能加载该扩展:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <goals>
                <goal>xjc</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.jvnet.jaxb2_commons</groupId>
            <artifactId>jaxb2-basics</artifactId>
            <version>1.11.1</version>
        </dependency>
        <dependency>
            <groupId>org.jvnet.jaxb2_commons</groupId>
            <artifactId>jaxb2-basics-tools</artifactId>
            <version>1.11.1</version>
        </dependency>
    </dependencies>
</plugin>

方案二:使用兼容Jakarta的jaxb2-basics继承扩展

如果你更倾向于使用专门的inheritance:implements标签,可以引入支持Jakarta XML Binding的jaxb2-basics扩展包:

添加maven依赖

在插件的<dependencies>中添加Jakarta版本的jaxb2-basics依赖:

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

保留原有bindings.xjb结构

此时你原来的bindings.xjb文件可以继续使用http://jaxb2-commons.dev.java.net/basic/inheritance命名空间,插件会正确识别继承扩展。

内容的提问来源于stack exchange,提问作者Petr Štechmüller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:55:16