【发布时间】:2016-11-18 17:00:46
【问题描述】:
我正在尝试使用 JAXB 插件从 xsd 生成 java 类,但无法获得我想要的效果。 我的用例是:
a.xsd 有一些元素。 b.xsd 有一些元素。
composite.xsd 需要包含来自“a.xsd”和“b.xsd”的一些元素以及它自己的元素。
到目前为止,我已经尝试了很多选择。我可以将 xsds( a 和 b )导入“复合”,但这只会使我能够将“a”和“b”中的元素用于“复合”xsd,但是当我使用 jaxb 生成类时,它不会自动从“a 和 b”中提取所有内容。 例如:
a.xsd -> has "name" element.
b.xsd -> has "phone" element.
composite.xsd -> imports a and b and has "nickname" element.
因此,如果我没有在 Composite.xsd 中明确使用“name”和“phone”,生成的 java 类将不会生成它们。也可能有多级导入(像 Composite.xsd 这样的继承包括 "b.xsd" 和 "b.xsd" 包括 "a.xsd )。
所以我希望复合在生成的类中包含来自“a”和“b”的所有元素,而无需在复合.xsd 中显式重复 a.xsd 和 b.xsd 的元素。
期望的输出:
composite.class
name, phone, nickname.
请指教。
以下是 xsd 详细信息的更多详细信息: (字段名称与我在原始问题中输入的名称不同,但会给出一个要点。)。
**a.xsd**
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="Customer">
<xsd:sequence>
<xsd:element name="name" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
**b.xsd**
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="Payments">
<xsd:sequence>
<xsd:element name="amount" type="xsd:float" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
**composite.xsd**
<xsd:include schemaLocation="x.xsd" />
<xsd:include schemaLocation="y.xsd" />
<xsd:complexType name="CustomerPayments">
<xsd:sequence>
<xsd:element name="customer" type="Customer" />
<xsd:element name="payments" type="Payments" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
有了上面的 xsds,我想要实现的是有一个复合 java 类(由 JAXB maven 插件生成)从导入/包含的 xsds 中自动具有“名称”和“金额”等字段。
【问题讨论】:
-
发布您的 XSD,以及迄今为止您尝试过的内容。这将有助于解决问题
-
当然,刚刚添加了示例 xsd sn-ps。