JAXB / MOXy: Как установить, какой xpath подразумевается использовать?

Я использую МОКСИ @XmlPath("/foo/bar[@baz]"),

В другом месте приложения мне нужен XSLT 2.0, поэтому я включил Saxon HA 9.5 в мой путь к классам. Но это вызвало сбой XPath (не находит узлы, в отличие от реализации JDK).

Как я могу установить для MOXy, какой XML / XPath предполагается использовать?

В настоящее время я использую jaxb.properties рядом с бобами JAXB .class, но я в порядке, чтобы создать маршаллер с некоторыми заводскими настройками или чем-то подобным.

Дополнительный вопрос: я думаю, что проблема с XPath заключается в том, что файл XML использует пространства имен, <deployment xmlns="urn:jboss:bean-deployer:2.0"> ...
Как я могу заставить саксонцев игнорировать пространства имен в XPath? (без переписывания выражения XPath).

2 ответа

Решение

EclipseLink JAXB (MOXy)@XmlPath аннотация поддерживает подмножество спецификации XPath. Обработка XPath выполняется самой MOXy. Поддерживаются следующие концепции:

  • Атрибут - @id
  • Элемент - address
  • Элемент по позиции - address[1]
  • Элемент по предикату - address[@type='mailing']
  • Элемент Текст - name/text()
  • Текст - text()
  • Self - .
  • Сочетание - personal-info/name[2]/text()

Для узлов, квалифицированных в пространстве имен, префиксы, определенные в @XmlNs аннотации могут использоваться для определения фрагментов XPath. Предполагается, что неквалифицированные фрагменты находятся в пространстве имен, указанном с помощью @XmlSchema,

Для справки, это не было связано с МОКСИ. Это был мой код с использованием XPath. Итак, я закончил с

//XPathFactory xpf = XPath xp = XPathFactory.newInstance();
//XPathFactory xpf = new net.sf.saxon.xpath.XPathFactoryImpl();
XPathFactory xpf = new com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl();

Это будет жаловаться

com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl is internal proprietary API and may be removed in a future release

но работает.

Что касается пространств имен, вот обсуждение игнорирования пространств имен.

Другие вопросы по тегам