EclipseLink MOXy @XmlPath поддержка для получения значения элемента по значению атрибута - PullRequest
2 голосов
/ 16 марта 2011

Используя реализацию EclipseLink MOXy JAXB, я пытаюсь использовать аннотацию @XmlPath для получения значений элемента на основе значения атрибута элемента.Я не могу заставить его работать.Поддерживается ли это?

Выдержка XML:
<Item>
...
<ItemRefFields>
<ItemRefField id="1">12345</ItemRefField>
<ItemRefField id="2">blah</ItemRefField>
</ItemRefFields>
</Item>

POJO Выдержка:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="Item")
public class Item
{
...
@XmlPath("ItemRefFields/ItemRefField[@id='1']/text()")
private String ItemRef1 = null;
@XmlPath("ItemRefFields/ItemRefField[@id='2']/text()")
private String ItemRef2 = null;
...
}

Теперь происходит то, что оба значения присваиваются ItemRef2 по очереди, напримерэто «бла» в конечном итоге является окончательным значением, но ItemRef1 никогда не получает назначенное значение.Я полагаю, что это потому, что часть значения атрибута выражения XPath ([@ id = 'x']) игнорируется.Таким образом, оба выражения XPath обрабатываются как одинаковые, и кажется, что это приводит к тому, что выражение сначала сопоставляется с ItemRef1, а затем с ItemRef2, причем ItemRef2 перезаписывает сопоставление ItemRef1, поэтому ItemRef2 выигрывает.

Я надеюсь, что это вызвано синтаксической проблемой с моей стороны.Любой совет будет оценен.

Спасибо, Кевин

1 Ответ

1 голос
/ 17 марта 2011

Я веду EclipseLink JAXB (MOXy) , и эта функция является частью предстоящего выпуска EclipseLink 2.3.Вы можете попробовать это сегодня, загрузив одну из ночных загрузок EclipseLink 2.3.0 (начиная с 22 марта) по адресу:

Отображение будет таким же, какВы описали в своем вопросе:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="Item")
public class Item
{
  ...
  @XmlPath("ItemRefFields/ItemRefField[@id='1']/text()")
  private String ItemRef1 = null;
  @XmlPath("ItemRefFields/ItemRefField[@id='2']/text()")
  private String ItemRef2 = null;
  ...
}

Для получения дополнительной информации

...