2014-02-03 2 views
1

В 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) на другие доступные значения, но без везения.

Кто-нибудь есть ключ, что еще искать ...

ответ

0

поведение вы видите матчи, что у вас есть:

  1. Ваш XML содержит элементы, которые не определены в схеме XML поэтому вам получают ошибки проверки.
  2. Ваш XML содержит элементы, которые сопоставляются с вашей объектной моделью, и это работает правильно.

Вещи, которые вы можете сделать:

  1. Включить определение для элементов XML в документе в схеме XML.
  2. Сделайте определение для ваших XML-элементов более гибким, используя концепцию any.
+0

Если честно, я не уверен, что делать. Что касается xml, он не содержит данных, которые не определены в суперклассе. Я попытался добавить некоторое определение xsd суперкласса прямо к xsd, как определение элемента последовательности в определении RemoteHost в xsd, но проблема сохраняется. Можете ли вы, пожалуйста, помочь мне с каким-то примером или ссылкой ... – zbubric