Я пытаюсь демаршалировать поток данных XML с помощью EclipseLink MOXy с XPath, используя функцию contains.
Когда я применяю образец 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>