EclipseLink MOXy @XmlPath返回包含的错误数据

时间:2012-12-21 18:14:43

标签: eclipselink marshalling moxy

我正在尝试使用包含函数的Eclipse,使用带有XPath的EclipseLink MOXy解组XML数据流。

当我将示例XPath直接应用于示例XML数据流时,我得到了正确的返回值(Ref_number_1)。但是,当我使用MOXy解组时,为refNumber1设置的值为“Ref_number_2”。

MOXy不支持这种类型的XPath吗?它似乎至少是理解它,因为它不会抛出错误,只是设置错误的值。

任何人都有这方面的经验吗?知道更好的方法吗?

感谢您的帮助。

元帅代码:

String s = //xml stream from restful service (see xml example below);
StringReader sr = new StringReader(s);
ReferenceNumber refNum = (ReferenceNumber)marshaller.unmarshal(
            new StreamSource(sr));

会员注释:

@XmlPath("Header/ReferenceNumbers/ReferenceNumber[contains(ReferenceNumberType, \"REF_NUMBER_TYPE_1\")]/ReferenceNumber/text()")
private String refNumber1;

XML数据:

<?xml version="1.0" encoding="UTF-8"?>
<Document>
  <Header>      
    <ReferenceNumbers>
      <ReferenceNumber>
        <ReferenceNumber>Ref_number_1</ReferenceNumber>
        <ReferenceNumberType>REF_NUMBER_TYPE_1</ReferenceNumberType>
      </ReferenceNumber>
      <ReferenceNumber>
        <ReferenceNumber>Ref_number_2</ReferenceNumber>
        <ReferenceNumberType>REF_NUMBER_TYPE_2</ReferenceNumberType>
      </ReferenceNumber>
    </ReferenceNumbers>
  </Header>
</Document>

1 个答案:

答案 0 :(得分:1)

注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。

目前MOXy不支持该格式的XPath。目前,条件检查必须在元素中包含的属性上,例如(参见:http://blog.bdoughan.com/2011/03/map-to-element-based-on-attribute-value.html)。

@XmlPath("personal-info/name[@type='first']/text()")
String firstName;

我输入了以下错误,以便我们改进对@XmlPath注释的验证:

我也对您问题中描述的用例感兴趣。您是否介意针对MOXy组件输入增强功能: