如何使用 jaxb2-maven-plugin 向 jaxb 生成的 java bean 添加后缀

How can I add a suffix to my jaxb generated java beans using jaxb2-maven-plugin

提问人:BarbetNL 提问时间:11/7/2023 更新时间:11/13/2023 访问量:41

问:

我从第三方导入了 xsd 和 wsdl 作为其服务的合同。我正在使用 maven-jaxb2-plugin 生成 bean。由于我的项目中的命名冲突,我想为生成的 bean 名称添加后缀。

这是我的插件配置:

<plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxb2-maven-plugin</artifactId>
                <version>${jaxb2.maven.version}</version>
                <configuration>
                    <xjbSources>
                        <xjbSource>src/main/resources/bindings.xjb</xjbSource>
                    </xjbSources>
                    <sources>
                        <source>src/main/resources/xsd</source>
                    </sources>
                </configuration>
                <executions>
                    <execution>
                        <id>xjc</id>
                        <goals>
                            <goal>xjc</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

这是我的bindings.xjb文件:

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb"
        xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
        version="3.0">

    <jaxb:globalBindings>
        <!-- All beans should extend this base class: -->
        <xjc:superClass name="my.project.xml.MyXmlObject"/>
        <!-- No need for bigint -->
        <jaxb:javaType name="long" xmlType="xs:nonNegativeInteger"
                       parseMethod="my.project.xml.TypeConverter.parseLong"
                       printMethod="my.project.xml.TypeConverter.printLong"/>
    </jaxb:globalBindings>

</jaxb:bindings>

项目像这样构建得很好,并且生成了 bean。

我找到了一些类似的代码,但它给出了错误:

<jaxb:schemaBindings>
            <jaxb:package name="my.project"/>
            <jaxb:nameXmlTransform>
                <jaxb:elementName prefix="My" suffix="Dto"/>
                <jaxb:typeName prefix="My" suffix="Dto"/>
            </jaxb:nameXmlTransform>
        </jaxb:schemaBindings>

我收到错误:

com.sun.istack.SAXParseException2: The "jaxb:schemaBindings" customization is not associated with any schema element.

我该如何解决这个问题?

java maven jaxb maven-jaxb2-插件

评论


答:

0赞 Laurent Schoelens 11/11/2023 #1

我的猜测是你错过了本节schemaLocation="myxsd.xsd"schemaBindings

例如,根据您的配置,您应该尝试添加

<jaxb:bindings schemaLocation="xsd/myxsd.xsd">
  <jaxb:schemaBindings>
    <jaxb:package name="mypackage"/>
    <jaxb:nameXmlTransform>
      <jaxb:elementName prefix="My" suffix="Dto"/>
      <jaxb:typeName prefix="My" suffix="Dto"/>
    </jaxb:nameXmlTransform>
  </jaxb:schemaBindings>
</jaxb:bindings>

针对一个简单的测试项目进行了测试,并将包设置为 ,并得到以下结果po

问候

编辑 2023 年 11 月 13 日

在 JAXB-RI 中处理它,因为这是一个合理的问题

<jaxb:globalBindings>
  <jaxb:nameXmlTransform>
    <jaxb:elementName prefix="My" suffix="Dto"/>
    <jaxb:typeName prefix="My" suffix="Dto"/>
  </jaxb:nameXmlTransform>
</jaxb:globalBindings>

评论

0赞 BarbetNL 11/13/2023
谢谢你的回答。我也让它适用于单个 xsd。不幸的是,有 100 个 xsd,所以我希望有一个通用的解决方案。据我在文档中看到,没有。不允许在 schemaLocation 中使用通配符。
0赞 Laurent Schoelens 11/20/2023
我在 jaxb-ri 和 PR 提案中创建了一个问题(请参阅上面的编辑),以便能够在 globalBindings 中设置它。希望这能被采纳
0赞 BarbetNL 11/20/2023
真棒!你能和我分享PR链接吗,那我就支持它。
1赞 Laurent Schoelens 11/20/2023
公关在这里 : github.com/eclipse-ee4j/jaxb-ri/pull/1780 问题在这里 : github.com/eclipse-ee4j/jaxb-ri/issues/1779