Я новичок в JAXB и Mule. У нас есть приложение, которое будет подключаться к различным третьим сторонам, каждый из которых предоставляет свои собственные XSD для определения схем сообщений.
Если я определяю разные объекты JAXBContext для каждой третьей стороны, я получаю ошибку "более одной зарегистрированной JAXBContext". Поэтому у меня есть один контекст с именами пакетов, разделенных двоеточием (например, "com.myorg.pack1: com.myorg.pack2: com.myorg.pack3")
Теперь я вижу, как в сообщениях генерируются пространства имен, даже если XSD имеют элемент, настроенный как неквалифицированный. Это происходит только для корневого узла.
К сожалению, сторонняя сторона, с которой я взаимодействую, не дает ответа, если есть пространство имен.
Есть ли способ не иметь пространства имен? Любые указатели будут оценены
Когда у вас есть elementFormDefault="qualified"
в вашей XML-схеме, это означает, что только глобальные (верхний уровень) элементы имеют пространство имен. В JAXB @XmlRootElement
соответствует глобальному элементу. Этот элемент будет иметь пространство имен, независимо от того, как вы создаете JAXBContext
.
понял, спасибо. так что на самом деле нет способа избежать пространств имен?
Если XML-схема содержит атрибут targetNamespace
то ожидается, что в XML-документе будет определена квалификация пространства имен. Если он задает elementFormDefault="unqualified"
тогда только глобальные (верхний уровень) элементы имеют пространство имен. Это означает, что префикс пространства имен по умолчанию не может быть использован. Это означает:
@XmlSchema
в классе package-info
или атрибут пространства имен в @XmlRootElement
, @XmlElement
и т.д.), Но тогда XML не будет действителен в отношении схемы XML.