[英]generate java classes from xsd with mutlitlevel imports
我正在尝试使用JAXB插件从xsd生成Java类,但无法获得想要的效果。 我的用例是:
a.xsd具有一些元素。 b.xsd具有一些元素。
Composite.xsd需要具有“ a.xsd”和“ b.xsd”中的某些元素,以及它自己的元素。
到目前为止,我已经尝试了许多选择。 我可以将xsds(a和b)导入“ composite”,但这只能使我能够将“ a”和“ b”中的元素使用到“ composite” 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中未明确使用“名称”和“电话”,则生成的Java类将不会生成这些名称。 也可能有多级导入(类似Composite.xsd的继承包括“ b.xsd”,“ b.xsd”包括“ a.xsd”的继承)。
因此,我希望Composite在生成的类中具有“ a”和“ b”中的所有元素,而不必在Composite.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 plugin生成),以自动具有来自导入/包含的xsds的“名称”和“金额”之类的字段。
生成的CustomerPayments
类将不包含属性name
或amount
,这不是XJC的工作方式。
但它会包含字段customer
和payments
类型的Customer
和Payments
,这将包含属性name
和amount
分别。 因此,您可以在最后执行customerPayments.getCustomer().getName()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.