繁体   English   中英

使用mutlitlevel导入从xsd生成Java类

[英]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类将不包含属性nameamount ,这不是XJC的工作方式。

但它会包含字段customerpayments类型的CustomerPayments ,这将包含属性nameamount分别。 因此,您可以在最后执行customerPayments.getCustomer().getName()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM