我正在尝试使用包含函数的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>
答案 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组件输入增强功能: