Джексон XML: Почему я никогда не должен выключать восстановление пространства имен? - PullRequest
0 голосов
/ 04 февраля 2020

Это в основном запрос на дополнительное объяснение ответа на проблему в github, и я пытаюсь найти решение проблемы префикса пространства имен, описанной в отдельном вопросе о stackoverflow.

Ссылки

GitHub Комментарий: https://github.com/FasterXML/jackson-dataformat-xml/issues/311#issuecomment -447681887 Stackoverflow Вопрос: XMLStreamException: URI пространства имен не привязан к префиксу, IBM jre

Цитата

`О, на самом деле ... так, исключение странное, но следует отметить, что вы НЕ ДОЛЖНЫ отключать восстановление пространства имен. Модуль Джексона XML абсолютно ожидает и требует его включения; Вероятно, я добавлю проверку, чтобы попытаться использовать ее без сбоев при создании XmlMapper. Я не могу придумать веских причин для необходимости его отключения, но я думаю, что вы пытаетесь использовать его в качестве обходного пути для проблемы.

Мне также интересно, если вы не понимаете, как XML пространства имен, и в частности, пространство имен по умолчанию работает с атрибутами: оно отличается от элементов. То есть «пространство имен по умолчанию» применяется только к элементам, а не к атрибутам: атрибут без префикса всегда имеет пространство имен «». Чтобы иметь атрибут в другом пространстве имен, необходимо использовать пространство имен, привязанное к явному префиксу. Поэтому для вас может иметь смысл прочитать XML спецификацию пространства имен (или статью, в которой это объясняется) - здесь есть некоторые тонкости, которые не обязательно интуитивны, такие как упомянутое выше различие между атрибутами и элементами в привязке пространства имен по умолчанию. `

Моя проблема

Если я оставлю включенным восстановление пространства имен, то сериализованный XML будет содержать префиксы" zdef "для определенных атрибутов. Это проблема, потому что я отправляю XML службе RestLike, которая не может проанализировать эти атрибуты, если у них есть префикс. Итак, я должен отключить это, но тогда, конечно, я обнаружил проблему с пустым атрибутом xmlns="", включенным в элемент root, который не нравится целевой системе также . Это разочаровывает ...

Таким образом, единственное решение этого - отключить восстановление пространства имен, а также использовать фабрики woodstox-core-asl, чтобы не указывать дополнительные атрибуты, чтобы сохранить XML в хорошем состоянии. и ultra generi c без какой-либо схемы или проверки атрибутов (почти как X HTML .. почти).

Вопросы

  1. Почему мы никогда не должны отключать восстановление пространства имен?

  2. Существует огромное давление, чтобы не включать дополнительные зависимости независимо от согласен ли я с этим подходом или нет. Есть ли способ исключить дополнительный атрибут xmlns без использования фабрик в библиотеке woodstox-core-asl? Может быть, я мог бы создать фильтр или обработчик для второго?

...