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