JAXB отменяет маршалирование неполных объектов при использовании элемента XSD <choice> - PullRequest
2 голосов
/ 04 августа 2010

У меня возникла проблема с отменой сортировки элемента в документе XML с использованием JAXB RI 2.2.1.

Элемент определен следующим образом (полный XSD слишком велик для публикации):

<xsd:element name="PatternExpression" type="PatternExpression_Type"/>

<xsd:complexType name="PatternExpression_Type">
  <xsd:choice>
    <xsd:element ref="Pattern"/>
    <xsd:sequence>
      <xsd:element ref="PatternOperator"/>
      <xsd:choice maxOccurs="unbounded">
        <xsd:element ref="Pattern"/>
        <xsd:element ref="PatternExpression" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:choice>
    </xsd:sequence>
  </xsd:choice>
</xsd:complexType>

Вот XML, который я пытаюсь разобрать:

<PatternExpression>
  <PatternOperator tc="2">and</PatternOperator>
  <Pattern>
    <PropertyName>FirstName</PropertyName>
    <PropertyValue>John</PropertyValue>
  </Pattern>    
  <Pattern>
    <PropertyName>LastName</PropertyName>
    <PropertyValue>Doe</PropertyValue>
  </Pattern>
</PatternExpression>

Когда я запускаю документ через unmarshaller, результирующий объект PatternExpression содержит PatternOperator и один Pattern, который оказывается последним в последовательности.

У кого-нибудь есть предложения относительно того, почему объекты Pattern не добавляются в список?

Я думаю, что присутствие PatternOperator позволило бы JAXB определить, к какому выбору относится элемент.

К вашему сведению, схема XML контролируется третьей стороной, поэтому ее нельзя изменить.

...