Наследование в определении XML-схемы (XSD) для объектов Java
Мне нужно создать определение схемы XML (XSD), которое описывает объекты Java.
Мне было интересно, как это сделать, когда рассматриваемые объекты наследуются от общего базового класса с параметром типа.
public abstract class Rule<T> { ... }
public abstract class TimeRule extends Rule<XTime> { ... }
public abstract class LocationRule extends Rule<Location> { ... }
public abstract class IntRule extends Rule<Integer> { ... }
....
(где XTime
а также Location
пользовательские классы определены в другом месте)
Как бы я пошел о создании XSD, чтобы у меня могли быть XML-узлы, представляющие каждый из подклассов Rule<T>
- без XSD для каждого из них повторяется их общее содержание?
Спасибо!
1 ответ
Решение
Conisder JAXB для XML-схемы -> компиляция Java.
XML-схема дает некоторые возможности для моделирования наследования:
<xs:complexType name="baseType">
<xs:sequence>
<xs:element name="a" type="xs:string"/>
<xs:element name="b" type="xs:long"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="extendedType">
<xs:complexContent>
<xs:extension base="baseType">
<xs:sequence>
<xs:element name="c" type="xs:dateTime"/>
<xs:element name="d" type="xs:base64Binary"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Однако я не думаю, что вы можете достичь именно того кода Java, который вы публикуете. Тем не менее, вы можете немного приблизиться к плагину наследования.