使用XSD <choice>元素</choice>时,JAXB解组不完整的对象

时间:2010-08-04 14:21:32

标签: java xsd jaxb

我在使用JAXB RI 2.2.1解组XML文档中的元素时遇到问题。

元素定义如下(完整的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架构由第三方控制,因此无法修改。

0 个答案:

没有答案