Саксонская миграция DynamicQueryContext Issue - PullRequest
0 голосов
/ 05 апреля 2019

Недавно я обновлял некоторые JAR-файлы в своем приложении. Я обновил Saxon JAR до версии 9.9. Теперь я вижу:

DynamicQueryContext.setContextItem()

претерпел некоторые изменения.

Теперь в документации API сказано,

Configuration.buildDocumentTree(javax.xml.transform.Source)

Но это даже не возвращает объект Item!

Так это правильный путь?

dynamicQueryContext.setContextItem((getConfiguration().buildDocumentTree(new StreamSource(new ByteArrayInputStream(xmlData.getBytes(StandardCharsets.UTF_8))))).getRootNode());

Это старый дремлющий код, и если честно, я не саксонский эксперт. Просто читаю документацию по API и пытаюсь разгадать эту загадку. По крайней мере, Eclipse не показывает ошибок таким образом.

1 Ответ

0 голосов
/ 06 апреля 2019

API, включающий StaticQueryContext и DynamicQueryContext, представлял собой неудачное сочетание методов, предназначенных для внутреннего использования, и методов, предназначенных для использования в приложениях, и стало очень трудно поддерживать совместимость между выпусками, поэтому его более 10 лет назад заменили на API-интерфейс s9api. который оказался гораздо лучше и стабильнее.

Вы не сказали, с какой версии вы мигрируете, поэтому мне трудно точно определить, когда она изменилась и почему; но я не вижу изменений в setContextItem () между 9.1 и 9.9.

Configuration.buildDocumentTree(javax.xml.transform.Source) - относительно недавнее введение (9,8?). В прошлом подобные методы возвращали DocumentInfo, представляющий узел документа (который является Предметом), но это вызывало проблему для функций, которые возвращают дерево с корнем в узле элемента, потому что не было места для размещения информации, которая относится к дереву в целом, а не к его корневому узлу. Итак, мы ввели класс TreeInfo для представления дерева, и вы можете получить элемент NodeInfo в корне дерева, используя TreeInfo.getRootNode().

Если вы можете, перейдите на интерфейсы s9api, и вы найдете гораздо более высокий уровень стабильности API в будущем.

...