繁体   English   中英

jaxb2-maven-plugin 生成带有 xmlns 前缀的 package-info.java

[英]jaxb2-maven-plugin generating package-info.java with xmlns prefixes

我想用 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 插件正在为我生成以下package-info.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;

我生成的文件中缺少前缀。 怎么做? 我已经尝试创建一个绑定文件,但这并没有达到我的预期。

请参阅有关如何解决此问题的答案: https://stackoverflow.com/a/10812236/1389219

答案写得很好,很容易理解。 基本上你必须:

  1. 放弃jaxb2-maven-plugin以支持maven-jaxb2-plugin
  2. 包含jaxb2-namespace-prefix依赖项并提供<arg>-Xnamespace-prefix</arg>
  3. 编写一个新的bindings.xml文件,它只有几行长。

您的 POM 文件将变得更加冗长,但值得拥有一个package-info.java以您需要的方式生成。

作为奖励,还有大量与maven-jaxb2-plugin相关的附加插件和依赖项,它们提供了额外的功能。 我发现有用的是jaxb2-rich-contract-plugin ,它提供了生成构建器并使生成的类不可变*的能力。

*好吧,严格来说不是不可变的(因为它只是将设置方法更改为 package 私有),但足以让他们感觉更安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM