Аппаратное обеспечение системы, на которое я пишу программное обеспечение, физически подключается через аппаратное обеспечение в древовидной структуре. Модель данных в нашем приложении - это дерево. Для нашего нового переписывания мы используем JAXB для создания модели данных.Использование абстрактного типа базового класса для перемещения всего дерева объектов JAXB
У нас есть три типа устройств, и все они разделяют некоторые свойства, поэтому я сделал Abtract DeviceType в схеме XSD. Мои три устройства (толкачи, переключатели, приемники) все простиралось от 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 для построения дерева объектов, но я не могу понять, как получить метод getter для getDevice(). Для обхода дерева я надеялся, что JAXB предоставит что-то вроде «getChildren», но я не вижу в API. Если я получаю объект переключателя, у меня есть методы для getSwitcher() и getReceiver(), но не метод getDevice(). Но я стараюсь избегать использования instanceof, когда я делаю полный обход дерева. Java-код, который строит xjc, не распространяется на класс Device, но я просто не узнал, как получить общий метод getter для всех устройств. Я только начал с Jaxb два дня назад, и у меня есть тонна, чтобы узнать о Jaxb API.
Вчера был мой первый день, играя с JAXB, я думаю, что этот инструмент отлично подходит для нашей системы. Наше оборудование - это буквально дерево, у нас есть несколько развертываний, и использование XML в качестве файла конфигурации сайта для создания модели состояния будет идеальным.
Любые предложения для начинающего JAXB здесь?