使用xjc从多个xsd文件生成Java

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用xjc从多个xsd文件生成Java相关的知识,希望对你有一定的参考价值。

环境

我有多个ant任务,每个任务都从一个XSD为不同的包生成java代码。所有任务总是一个接一个地执行。

在那些xsds中,一些元素可以被定义多次,但每个文件只能定义一次。这些元素应放在不同的包中。例如:

A_v1.xsd - contains:
         -> <xs:element name="A"> => my.package.a_v1.A.java
A_v2.xsd - contains:
         -> <xs:element name="A"> => my.package.a_v2.A.java

这很好用。

如何将其翻译成maven?

问题/我尝试了什么

我无法在pom中创建多个插件执行,将它们配置为不同并让它们同时运行。

所以我尝试在一步中从XSD生成所有Java代码,但这导致一个例外,说明某些字段已经定义。

我还尝试添加绑定,如:

<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<jxb:bindings schemaLocation="A_v1.xsd" >
    <jxb:schemaBindings>
        <jxb:package name="my.package.a_v1"/>
    </jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="A_v2.xsd" >
    <jxb:schemaBindings>
        <jxb:package name="my.package.a_v2"/>
    </jxb:schemaBindings>
</jxb:bindings>

但失败仍然是一样的。

任何帮助将不胜感激!提前致谢!

答案

通过词典提供的信息,我确定提供的XSD文件简单不正确。旧的ant构建似乎通过单独构建每个文件来隐藏它。最后为每个XSD添加一个命名空间。

以上是关于使用xjc从多个xsd文件生成Java的主要内容,如果未能解决你的问题,请参考以下文章

JAXB:如何在XSD中指定attr类型时更改XJC生成的类名?

XJC:从无效方案生成 JAXB 类

ant xjc 任务与 jdk 6 一起工作

xjc 和 XSD 的选择

JAXB XJC 代码生成 - Marshaller 生成的 xml 中缺少“schemaLocation”

XJC 生成整数而不是 int