2016-11-18 109 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