我们可以在多个软件包中为一组xsd生成JAXB类吗?

Man*_*ula 5 java xml jaxb jaxb2

我有一个xsd,其中嵌入了几个子XSD(使用“ xsd:include”。)(但是每个xsd都属于同一个名称空间)。我被要求在单独的子包(每个子XSD一个子包)而不是一个包中生成jaxb类。

根据到目前为止的jaxb:schemaBindings读物,如果只有那些xsds属于不同的名称空间,我们可以将它们添加到这些单独的xsds中并在单独的包中生成类。

但就我而言,我想在几个子包中为一组属于同一名称空间的xsds创建类。您能帮我使用JAXB做到这一点吗?


编辑:我已经添加了一些有关我的问题的更多说明,以使其更加清晰。

我所有的XSD都有以下标头。因此命名空间相同

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:srm="http://www.mycompany.com/srm/"
    targetNamespace="http://www.mycompany.com/srm/" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0" elementFormDefault="qualified"
    attributeFormDefault="unqualified" version="1.0">
Run Code Online (Sandbox Code Playgroud)

假设我的架构文件名为A.xsd,B.xsd和C.xsd。

  • 在C.xsd中,我使用上述标题定义了一些元素(字符串类型)。

  • 在B.xsd中,我使用“ xsd:include”标记包含了C.xsd,然后使用C.xsd中定义的复杂类型定义了complexType。(具有与我上面提到的相同的标头)

  • 在A.xsd中,我使用“ xsd:include”标记包含了B.xsd,然后使用B.xsd中定义的复杂类型定义了complexType定义。(具有我上面提到的相同标头)

我想像下面提到的那样生成JAXB类。

  • 与A.xsd相关的JAXB类在com.generate.packageA包中生成。

  • 与B.xsd相关的JAXB类在com.generate.packageB包中生成。

  • 与C.xsd相关的JAXB类在com.generate.packageC包中生成。

bdo*_*han 3

您可以将每个“包含”模式中的 JAXB 类分别生成到单独的包中,并利用 XJC 工具中可用的情节机制。

示例(来自 Stack Overflow 上给出的答案)