JAXB unmarshals incomplete objects when using XSD <choice> element
I'm experiencing a problem unmarshalling a element in an XML document using JAXB RI 2.2.1.
The element is defined as follows (the full XSD is too large to post):
<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>
Here is the XML I'm trying to unmarshal:
<PatternExpression>
<PatternOperator tc="2">and</PatternOperator>
<Pattern>
<PropertyName>FirstName</PropertyName>
<PropertyValue>John</PropertyValue>
</Pattern>
<Pattern>
<PropertyName>LastName</PropertyName>
<PropertyValue>Doe</PropertyValue>
</Pattern>
</PatternExpression>
When I run the do开发者_C百科cument through the unmarshaller, the resulting PatternExpression object contains the PatternOperator and a single Pattern, which happens to be the last one in the sequence.
Does anyone have any suggestions as to why the Pattern objects are not being added to the list?
I would think that the presence of the PatternOperator would allow JAXB to determine what choice the element fall into.
FYI, the XML schema is controlled by a 3rd party, so it cannot be modified.
精彩评论