В XSD схеме я использую наследование от класса, который не определен в схеме (по erhitectural причине он находится в другом модуле/пакет) определяется как:JAXB Проверка XML
<xsd:complexType name="RemoteHost">
<xsd:annotation>
<xsd:appinfo>
<jaxb:class ref="com.dummy.entities.RemoteHost"></jaxb:class>
</xsd:appinfo>
</xsd:annotation>
</xsd:complexType>
Например, дочерние классы определены в же XSD документ как:
<xsd:complexType name="hostFirstSubType">
<xsd:complexContent>
<xsd:extension base="RemoteHost">
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="otherHostType">
<xsd:complexContent>
<xsd:extension base="RemoteHost">
<xsd:attribute name="id" type="xsd:int" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
Класса, который sublclassed в XSD определяется как:
@SuppressWarnings("restriction")
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(name = "GenericRemoteHost",propOrder = {
"address",
"username",
"password",
"sshPort"
})
public class RemoteHost {
@XmlElement(required = true, namespace = "http://com/dummy/entities/RemoteHost")
protected String address;
@XmlElement
protected String username;
@XmlElement
protected String password;
@XmlElement
protected Integer sshPort;
...
Sample часть XML для загрузки:
<hostFirstSubType>
<rh:address>127.0.0.1</rh:address>
<rh:username>user</rh:username>
<rh:password>pass</rh:password>
<rh:sshPort>22</rh:sshPort>
</hostFirstSubType>
<otherHostType id="1">
<rh:address>127.0.0.1</rh:address>
<rh:username>user</rh:username>
<rh:password>pass</rh:password>
<rh:sshPort>22</rh:sshPort>
</otherHostType>
Я создал коллектор проверки, чтобы отобразить все ошибки проверки во время немаршалинга из XML-файла против этой схемы и результат как-то сбивает с толку: Validation коллектор показывает ошибку проверки для каждого класса наследует мой RemoteHOST как: мус
элемент «hostFirstSubType» t не имеет символа или элемента информационный элемент [children], так как тип содержимого типа пуст.
Element «otherHostType» не должны иметь характер или элемент информации пункт [детей], потому что тип содержимого типа является пустой
Однако, когда я пропускаю проверки части, XML-файл правильно загружен в объекты ява , все данные загружаются и становятся доступными как с геттерами, так и с сеттерами.
Как было сказано в некоторых других сообщениях, я попытался изменить @XmlAccessorType (XmlAccessType.NONE) на другие доступные значения, но без везения.
Кто-нибудь есть ключ, что еще искать ...
Если честно, я не уверен, что делать. Что касается xml, он не содержит данных, которые не определены в суперклассе. Я попытался добавить некоторое определение xsd суперкласса прямо к xsd, как определение элемента последовательности в определении RemoteHost в xsd, но проблема сохраняется. Можете ли вы, пожалуйста, помочь мне с каким-то примером или ссылкой ... – zbubric