开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜