JAXB создает пустые объекты - PullRequest
1 голос
/ 27 июня 2011

У меня есть XML на основе XSD. Xsd

<xs:complexType name="objectOneType" mixed="true">
    <xs:sequence>
        <xs:element ref="nestedObject" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="attribute" type="xs:string" use="optional"/>
</xs:complexType>

Теперь, когда я получу этот XML

<xmlresponse>
  <xmlrequest>
    <objectone attribute="changed" />
  </xmlrequest>
  <xmlsrc>
    <objectone attribute="changed" />
  </xmlsrc>
</xmlresponse>

В этом XML объект OBjECTONE не имеет объекта с именем NESTEDOBJECT . теперь вместо того, чтобы игнорировать его, он вставляет пустой объект в OBJECTONE , который имеет тип STRING . поэтому, когда мой код пытается обработать OBJECTONE , предполагая, что он имеет тип объекта NESTEDOBJECT . Выдает исключение в классе.

Есть идеи?

P.S .: Убей меня, я использую JAXB 1.2

1 Ответ

2 голосов
/ 27 июня 2011

Ключом является аннотация mixed="true".С этой аннотацией возможны структуры типа

<content>
  <italic>Italic</italic> ist not <underline>underline</underline>
</content>

.Внутренне JAXB создает List<Object> insideContent, который будет в верхнем регистре классов: String, Italic, String, Underline и String.Я предполагаю, что вы выводите свой XML с чем-то вроде Marshaller.JAXB_FORMATTED_OUTPUT, который вставляет новую строку и табулятор для форматированного вывода *1013*.Вы можете либо:

  • Не использовать форматированный вывод: <content><italic>This</italic> is a <underline>test</underline></content> не должно иметь начального или конечного String
  • Не использовать mixed="true"
  • Проверьте ваш дочерний класс с помощью instanceOf, итерируя List<Object>
...