提问人:BarbetNL 提问时间:11/7/2023 更新时间:11/13/2023 访问量:41
如何使用 jaxb2-maven-plugin 向 jaxb 生成的 java bean 添加后缀
How can I add a suffix to my jaxb generated java beans using jaxb2-maven-plugin
问:
我从第三方导入了 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.
我该如何解决这个问题?
答:
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 中处理它,因为这是一个合理的问题
- 创建期 : https://github.com/eclipse-ee4j/jaxb-ri/issues/1779
- 创建公关 : https://github.com/eclipse-ee4j/jaxb-ri/pull/1780
- 根据我上面的示例进行了测试,使用如下所示的新配置:
<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
评论