我編寫軟件的系統硬件通過硬件以樹結構物理連接。我們的應用程序中的數據模型是一棵樹。對於我們新的重寫,我們使用JAXB來創建數據模型。使用抽象基類來遍歷整個JAXB對象樹
我們有三種類型的設備,它們都共享一些屬性,所以我在XSD模式中創建了一個Abtract DeviceType。我的三個設備(推進器,切換器,接收器)都是從設備類型的XSD擴展這樣的:
<xs:complexType name="DeviceType" abstract="true">
<xs:sequence>
<xs:element name="atrr1" type="xs:int"></xs:element>
<xs:element name="attr2" type="xs:int"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PusherType">
<xs:complexContent>
<xs:extension base="pts:DeviceType">
<xs:sequence>
<xs:element name="Switcher" type="pts:SwitcherType" minOccurs="1"></xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SwitcherType">
<xs:complexContent>
<xs:extension base="pts:DeviceType">
<xs:sequence>
<xs:element name="switcher" type="pts:SwitcherType" minOccurs="1"></xs:element>
<xs:element name="receiver" type="pts:ReceiverType" minOccurs="1"></xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
推杆只有切換子元素和切換器可以同時切換器或接收器的孩子。接收者是行結束(葉節點)。 xjc構建類。我得到Unmarshaller來構造對象樹,但我無法弄清楚如何獲取getDevice()的getter方法。對於樹遍歷來說,我希望JAXB會提供類似「getChildren」的東西,但是我沒有在API中看到。如果我得到一個切換器對象,我有getSwitcher()和getReceiver()方法,但沒有getDevice()方法。但我試圖避免使用instanceof,當我做一個完整的樹遍歷。 xjc構建的Java代碼的確擴展了Device類,但我還沒有學會如何爲所有設備獲取通用的getter方法。我剛剛在兩天前開始使用Jaxb,並且我有很多瞭解Jaxb API的知識。
昨天是我第一次玩JAXB,我覺得這個工具很適合我們的系統。我們的硬件實際上是一棵樹,我們有多個部署,並且使用XML作爲我們的站點配置文件來構建狀態模型將是理想的。
對於JAXB新手的任何建議嗎?