Как запретить JAXB писать неиспользуемые пространства имен во время маршалингаJAVA

Программисты JAVA общаются здесь
Anonymous
Как запретить JAXB писать неиспользуемые пространства имен во время маршалинга

Сообщение Anonymous »

Удалось ли кому-нибудь удалить неиспользуемые пространства имен во время маршалирования объекта с помощью JAXB? Вот ссылка на запрошенную функцию: https://github.com/javaee/jaxb-v2/issues/103 (см. описание)
Есть ли свойство для настройки JAXB для этого ?
Исправлено ли это в MOXy?
В настоящее время я просматриваю объект, который необходимо маршалировать, и извлекаю все классы, которые необходимо связать с Class[] classToBeBound.
Затем я создаю новый JAXBContext.newInstance(classesToBeBound)
Неиспользуемые пространства имен теперь не включаются в XML.
Я знаю, что проверка XML действительна даже для неиспользуемых пространств имен, но, по моему мнению, с этим должна справиться инфраструктура.
Следующая ссылка https://blogs.oracle. com/enterprisetechtips/entry/customizing_jaxb упоминает различные исправления (см. где-то в середине текста), но при попытке найти решение по этим ссылкам либо ссылка не работает, либо никто ее не решил.
Любые комментарии приветствуются.
(EDIT)
Обычный текст:
ПРЕДОСТАВЛЕНО

Код: Выделить всё

a new instance of JAXBContext and add 2 classes with each a separate namespace.
КОГДА

Код: Выделить всё

marshalling a class that has these 2 classes as a property but only 1 of them is not null
ТОгда

Код: Выделить всё

I expect only the namespace of the property that is not null to be visible in the XML.
НО НАСТОЯЩЕЕ

Код: Выделить всё

that both namespaces are in the xml.
Итак, мой вопрос заключался в том, как я могу удалить или указать JAXB НЕ записывать неиспользуемые пространства имен?
Чтобы поместить это в java-код:
ДАН

Код: Выделить всё

public class Foo{
private Bar bar; //namespace something2
private User user; //namespace user
}
КОГДА

Код: Выделить всё

JAXBContext c = JAXBContext.newInstance(Foo.class, Bar.class, User.class);
...
Foo foo = new Foo();
foo.setBar(null);
foo.setUser(new User("Bob"));
marshaller.umarshal(foo);
ТОгда я ожидаю, что XML будет НО НА самом деле это (обратите внимание на пространство имен Something2) Конечно, это упрощенный пример, и наша спецификация типа имеет около 30 различных пространств имен.

Подробнее здесь: https://stackoverflow.com/questions/229 ... arshalling

Вернуться в «JAVA»