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

标签 java maven jaxb xjc jaxb2-maven-plugin

我想用 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/

    相关文章:

    javascript - 打印任何 Java 应用程序的函数/方法调用序列

    java "terminate called without an active exception "

    maven - 在 Maven 中使用嵌入式数据库与 Flyway 和 jOOQ 进行持续集成

    java - Spring Jaxb2 : How to append batch data to XML file with no reading it to memory?

    jaxb - 解码单个元素列表失败

    java - 如何使用 Map 键作为列表对象和值作为顺序对 ArrayList 进行排序?

    java - 找出我可以在内存中创建的最大数组

    java - pom.xml 的正则表达式表示法

    maven - Openxava+Maven+Tomcat7整合

    java - JAXB 在没有适配器的情况下编码 map