У меня возникла проблема с отменой сортировки элемента в документе 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 контролируется третьей стороной, поэтому ее нельзя изменить.