JAXB записывает пространства имен в один класс из других классов - PullRequest
1 голос
/ 01 февраля 2012

Когда я создаю jaxbcontext со всеми моими классами, jaxb строит xml для класса с пространством имен из другого класса.Если я перехожу к jaxbcontext только один класс, он работает нормально.Мои классы генерируются с помощью xjc.

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {

 })
@XmlRootElement(name = "eReq")
public class EReq {
...

И когда я передаю только этот класс в jaxbcontext, вывод выглядит следующим образом.

<eReq><status>UNBLOCKED</status></eReq>

Но я помещаю все свои классы в вывод контекста jaxb,быть таким:

<eReq xmlns:ns2="myns1" xmlns:ns3="myns2" xmlns:ns4="http://schemas.xmlsoap.org/soap/envelope/"><status>UNBLOCKED</status></eReq>

Это пространства имен из моих других классов.Почему jaxb поместил его в этот класс?

1 Ответ

2 голосов
/ 01 февраля 2012

Почему jaxb помещает его в этот класс?

Поскольку контекст JAXB содержит расширенный набор всех пространств имен, с которыми он создан, и он просто помещает их все в каждый генерируемый документ.

Это происходит потому, что пространства имен необходимо добавить к корневому элементу (чтобы избежать чрезмерно расточительного повторного объявления пространств имен для каждого дочернего элемента), и он не знает заранее, какие пространства имен требуются для любогоданный набор связанных объектов (JAXB поддерживает пошаговую сериализацию).

Таким образом, среда выполнения JAXB, вероятно, может избежать этого;но это не так.

Если вам это не нравится, вам нужно создать несколько контекстов.

...