JAXB + Mule. Избегайте пространств имен в преобразованиях XML

1

Я новичок в JAXB и Mule. У нас есть приложение, которое будет подключаться к различным третьим сторонам, каждый из которых предоставляет свои собственные XSD для определения схем сообщений.

Если я определяю разные объекты JAXBContext для каждой третьей стороны, я получаю ошибку "более одной зарегистрированной JAXBContext". Поэтому у меня есть один контекст с именами пакетов, разделенных двоеточием (например, "com.myorg.pack1: com.myorg.pack2: com.myorg.pack3")

Теперь я вижу, как в сообщениях генерируются пространства имен, даже если XSD имеют элемент, настроенный как неквалифицированный. Это происходит только для корневого узла.

К сожалению, сторонняя сторона, с которой я взаимодействую, не дает ответа, если есть пространство имен.

Есть ли способ не иметь пространства имен? Любые указатели будут оценены

Теги:
jaxb
mule

1 ответ

1
Лучший ответ

Когда у вас есть elementFormDefault="qualified" в вашей XML-схеме, это означает, что только глобальные (верхний уровень) элементы имеют пространство имен. В JAXB @XmlRootElement соответствует глобальному элементу. Этот элемент будет иметь пространство имен, независимо от того, как вы создаете JAXBContext.

ОБНОВИТЬ

понял, спасибо. так что на самом деле нет способа избежать пространств имен?

Если XML-схема содержит атрибут targetNamespace то ожидается, что в XML-документе будет определена квалификация пространства имен. Если он задает elementFormDefault="unqualified" тогда только глобальные (верхний уровень) элементы имеют пространство имен. Это означает, что префикс пространства имен по умолчанию не может быть использован. Это означает:

  1. Нет способа избежать пространств имен, если вы хотите, чтобы документ XML был действительным в отношении вашей XML-схемы.
  2. Вы можете удалить все сопоставление пространства имен из вашей модели JAXB (т. @XmlSchema в классе package-info или атрибут пространства имен в @XmlRootElement, @XmlElement и т.д.), Но тогда XML не будет действителен в отношении схемы XML.
  • 0
    понял, спасибо. так что на самом деле нет способа избежать пространства имен?
  • 0
    @aishwarya - я обновил свой ответ, чтобы предоставить дополнительную информацию. Является ли третья сторона, предоставившая схемы XML, определяющие квалификацию пространства имен, которая не будет принимать документы XML, содержащие квалификацию пространства имен?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню