如何使用 jaxb2-maven-plugin 预定义 XSD 文件名

问题描述 投票:0回答:2

我使用下面的代码从带注释的 java 类生成 XSD。 XSD 的默认名称始终为“schema1.xsd”。我应该如何仅使用该插件来预定义它?目前我使用 maven-antrun-plugin 进行文件重命名。 插件手册不包含相关信息。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>jaxb2-maven-plugin</artifactId>
  <version>2.3</version>
  <executions>
    <execution>
      <goals>
        <goal>schemagen</goal>
      </goals>
      <phase>generate-sources</phase>
      <configuration>
        <sources>
          <source>src/main/java/***some package***</source>
        </sources>
        <outputDirectory>${project.build.directory}/generated-sources/schemas</outputDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>
java maven xsd jaxb jaxb2-maven-plugin
2个回答
5
投票

答案已找到。仅使用 JAXB 注释来注释 java 类是不够的。在 DTO 包中应该存在文件“package-info.java”,其内容如下:

@XmlSchema(namespace = "http://your-namespace")
package com.your.package;

import javax.xml.bind.annotation.XmlSchema;

插件声明应该如下所示:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>jaxb2-maven-plugin</artifactId>
  <version>2.3</version>
  <executions>
    <execution>
      <goals>
        <goal>schemagen</goal>
      </goals>
      <phase>generate-sources</phase>
    </execution>
  </executions>
  <configuration>
    <sources>
      <source>src/main/java/com/your/package</source>
    </sources>
    <outputDirectory>${project.build.directory}/generated-sources/schemas</outputDirectory>
    <transformSchemas>
      <transformSchema>
        <uri>http://your-namespace</uri>
        <toFile>your-namespace.xsd</toFile>
      </transformSchema>
    </transformSchemas>
  </configuration>
</plugin>

0
投票

我在@kirill.login 答案中添加了一些详细信息。

我设法通过以下步骤配置 XSD 名称。 首先,我注释了我的 root bean:

package com.mypackage.model.messages;

import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "Packet", namespace="https://www.example.it/schemas/packets")
public class Packet {

然后我在同一个包中添加了文件

package-info.java

@XmlSchema(namespace = "https://www.example.it/schemas/packets")
package it.magentalab.datalogger.model.messages;

import jakarta.xml.bind.annotation.XmlSchema;

最后,在我的

pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
                <!-- Generate XML Schema from sources -->
                <execution>
                    <id>jxc</id>
                    <goals>
                        <goal>schemagen</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>src/main/java/com/mypackage/model/messages</source>
                            <source>src/main/java/com/mypackage/model/messages/package-info.java</source>
                        </sources>
                        <transformSchemas>
                            <transformSchema>
                                <uri>https://www.example.it/schemas/packets</uri>
                                <toFile>packets.xsd</toFile>
                            </transformSchema>
                        </transformSchemas>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

触发maven

generate-sources
第一阶段以
target/packets.xsd
结束。

© www.soinside.com 2019 - 2024. All rights reserved.