[英]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
答案写得很好,很容易理解。 基本上你必须:
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
,它提供了生成构建器并使生成的类不可变*的能力。
*好吧,严格来说不是不可变的(因为它只是将设置方法更改为 package 私有),但足以让他们感觉更安全。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.