我正在尝试使用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.
所以,如果我没有明确地使用" name"和"电话"在composite.xsd中,生成的java类不会生成那些。也可以有多级导入(类似于composite.xsd的继承包括" b.xsd"和" b.xsd"包括" a.xsd)。
所以我希望复合材料包含来自" 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插件生成)自动拥有像&#34; name&#34;这样的字段。和&#34;金额&#34;来自import / included xsds。
答案 0 :(得分:0)
生成的CustomerPayments
类不会包含属性name
或amount
,这不是XJC的工作原理。
但它将包含customer
和payments
类型的字段Customer
和Payments
,它们将分别包含属性name
和amount
。所以你最后可以做customerPayments.getCustomer().getName()
。