Это в основном запрос на дополнительное объяснение ответа на проблему в 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 .. почти).
Вопросы
Почему мы никогда не должны отключать восстановление пространства имен?
Существует огромное давление, чтобы не включать дополнительные зависимости независимо от согласен ли я с этим подходом или нет. Есть ли способ исключить дополнительный атрибут xmlns без использования фабрик в библиотеке woodstox-core-asl? Может быть, я мог бы создать фильтр или обработчик для второго?