美文网首页
JAXB - 将XSD生成JAVA类

JAXB - 将XSD生成JAVA类

作者: ilaoke | 来源:发表于2018-06-01 16:16 被阅读1318次

现有几个xsd文件,需要将其转成java类,可以利用JAXB 的xjc工具来实现。

IEDA 中生成java类

打开xsd文件,然后Tools --> JAXB --> Generate Java code from xml...,弹出如下窗口,指定路径和包,点击OK即可


image.png

正常情况下,这就可以了,默认生成的是中文注释(Windows 下可能乱码),如果需要英文注释,可以使用 maven-jaxb2-plugin 插件生成。

Maven插件生成java类

处理单个xsd文件

在pom文件中添加如下插件配置,其中 locale 设置为en,即可生成英文注释。

<build>
    <plugins>
      <plugin>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <version>0.14.0</version>
        <configuration>
          <schemaDirectory>src/main/resources/xsd</schemaDirectory>
          <generateDirectory>src/main/java</generateDirectory>
          <schemaIncludes>
            <include>xsd1.xsd</include>
          </schemaIncludes>
       <generatePackage>com.test.common.domain.xsd1</generatePackage>

          <packageLevelAnnotations>false</packageLevelAnnotations>
          <noFileHeader>true</noFileHeader>
          <episode>false</episode>
          <locale>en</locale>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

此时执行jaxb2:generate,即可生成java类。如果我们想让不同的xsd生成在不同的包下,并且要处理多个xsd文件,则需要多次配置 schemaIncludesgeneratePackage ,重复执行jaxb2:generate多次,这种方式不够友好。

image.png

处理多个xsd文件

将pom文件修改为如下,增加多个execution,并且指定不同的id。

<build>
    <plugins>
      <!--Generate java code by xsd file-->
      <plugin>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <version>0.14.0</version>
        <configuration>
          <schemaDirectory>src/main/resources/xsd</schemaDirectory>
          <generateDirectory>src/main/java</generateDirectory>
          <packageLevelAnnotations>false</packageLevelAnnotations>
          <noFileHeader>true</noFileHeader>
          <episode>false</episode>
          <locale>en</locale>
        </configuration>
        <executions>
          <execution>
            <id>xsd1-generate</id>
            <goals>
              <goal>generate</goal>
            </goals>
            <configuration>
              <schemaIncludes>
                <include>xsd1.xsd</include>
              </schemaIncludes>
              <generatePackage>com.test.common.domain.xsd1</generatePackage>
            </configuration>
          </execution>
          <execution>
            <id>xsd2-generate</id>
            <goals>
              <goal>generate</goal>
            </goals>
            <configuration>
              <schemaIncludes>
                <include>xsd2.xsd</include>
              </schemaIncludes>
              <generatePackage>com.test.common.domain.xsd2</generatePackage>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

此时执行mvn compile,即可将多个xsd文件生成java类。


image.png

如果想单独执行某一个或某几个execution:

// @后跟上execution id
// 执行单个execute
jaxb2:generate@xsd1-generate 

// 执行多个execute
jaxb2:generate@xsd1-generate jaxb2:generate@xsd2-generate 

IDEA下可以在Edit configurations中设置执行的命令:


image.png

Ref:

https://github.com/highsource/maven-jaxb2-plugin
https://stackoverflow.com/questions/31323475/jaxb-exception-messages-how-to-change-language
https://stackoverflow.com/questions/3166538/how-to-execute-maven-plugin-execution-directly-from-command-line
https://stackoverflow.com/questions/2857081/how-can-i-tell-jaxb-maven-to-generate-multiple-schema-packages

相关文章

网友评论

      本文标题:JAXB - 将XSD生成JAVA类

      本文链接:https://www.haomeiwen.com/subject/btjksftx.html