gpt4 book ai didi

java - jaxb2-maven-plugin 使用 xmlns 前缀生成 package-info.java

转载 作者:行者123 更新时间:2023-12-04 11:40:31 24 4
gpt4 key购买 nike

我想用 jaxb2-maven-plugin 生成 java 类。我正在使用以下配置:
pom.xml:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.5.0</version>
<executions>
<execution>
<id>SomeID</id>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<extension>true</extension>
<clearOutputDir>true</clearOutputDir>
<sources>
<source>src/main/xsd/schema.xsd</source>
</sources>
<noGeneratedHeaderComments>true</noGeneratedHeaderComments>
</configuration>
</execution>
</executions>
</plugin>
架构.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://my.target.namespace/uri"
xmlns="http://my.target.namespace/uri"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:h="http://my.uri.for.prefix.h"
xmlns:f="http://my.target.namespace/uri">

<xsd:import namespace="http://my.uri.for.prefix.h" schemaLocation="schema2.xsd"/>

<xsd:complexType name="FooType">
<xsd:sequence>
<xsd:element ref="h:something" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>

<xsd:element name="FooType" type="FooType" />

</xsd:schema>
Jaxb2 插件为我生成了以下 包信息.java :
@javax.xml.bind.annotation.XmlSchema(namespace = "http://my.target.namespace/uri", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package ...;
但是,我想得到的是:
@javax.xml.bind.annotation.XmlSchema(namespace = "http://my.target.namespace/uri", xmlns = {
@XmlNs(prefix="f", namespaceURI="http://my.target.namespace/uri"),
@XmlNs(prefix="h", namespaceURI="http://my.uri.for.prefix.h")
}, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package ...;

import javax.xml.bind.annotation.XmlNs;
我生成的文件中缺少前缀。怎么做?我已经尝试创建一个绑定(bind)文件,但这并没有像我预期的那样工作。

最佳答案

请参阅有关如何解决此问题的答案:
https://stackoverflow.com/a/10812236/1389219
答案写得很好,很容易理解。基本上你必须:

  • 掉落 jaxb2-maven-plugin赞成 maven-jaxb2-plugin .
  • 包括 jaxb2-namespace-prefix依赖并提供 <arg>-Xnamespace-prefix</arg> .
  • 写新 bindings.xml文件只有几行长。

  • 您的 POM 文件将变得更加冗长,但值得拥有一个 package-info.java生成您需要的方式。
    作为奖励,还有一堆与 maven-jaxb2-plugin 相关的附加插件和依赖项。提供额外的功能。我发现有帮助的是 jaxb2-rich-contract-plugin这提供了生成构建器并使生成的类不可变*的能力。
    * 好吧,严格来说不是不可变的(因为它只是将 setter 方法更改为包私有(private)的),但足以让它们感觉更安全。

    关于java - jaxb2-maven-plugin 使用 xmlns 前缀生成 package-info.java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62554985/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com