使用mutlitlevel导入

时间:2016-11-18 17:00:46

标签: java maven xsd jaxb

我正在尝试使用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。

1 个答案:

答案 0 :(得分:0)

生成的CustomerPayments类不会包含属性nameamount,这不是XJC的工作原理。

但它将包含customerpayments类型的字段CustomerPayments,它们将分别包含属性nameamount。所以你最后可以做customerPayments.getCustomer().getName()