tags:

views:

223

answers:

0

Hi, 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 document 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.