2016-11-18 83 views
0

我想从xsd使用JAXB插件生成java类,但无法获得我想要的效果。 我的用例是:从xsd与mutlitlevel导入生成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)。

所以我想复合所有元素从”a“和在生成的 “b” 类没有明确地重复a.xsd和composite.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> 
WITH以上的XSD

,我想要实现的是有一个复合java类(由JAXB行家插件生成的)来自动具有如“名称”和“量”字段从进口/包括xsds。

+0

发布您的XSD,以及您到目前为止尝试过了什么。这将有助于解决问题 – PKR

+0

当然,只需添加示例xsd片段即可。 – Pat

回答

0

生成的CustomerPayments类将不包含属性nameamount,这不是XJC的工作方式。

但是它将包含字段customer和类型CustomerPayments这将分别包含属性nameamountpayments。所以你最后可以做customerPayments.getCustomer().getName()

+0

感谢您的建议,Lexicore。欣赏它。看起来我必须考虑一些其他的选择,不知何故,我的用例需要导入/继承从父xsd到子xsd ...(生成的Java类)的所有字段。 – Pat

+0

@Sacs为什么你需要一个班的所有领域? – lexicore

+0

基本上我们有一堆项目,其中一些使用xsd生成pojos,一些不使用,但是不使用的项目已经手动创建java类(POJO),并且已经存在较多的字段重复使用xsd生成的pojos的项目。作为第一步开始简化这些影响最小的操作,我尝试使用xsds遍历生成pojos以避免手动生成pojos。为了实现这些,我想到了xsd继承(种类),使其他xsd中已存在的所有字段都添加到它的顶部。 – Pat