Кто-нибудь когда-нибудь мог удалить неиспользуемые пространства имен во время маршала объекта, используя JAXB? Вот ссылка на запрошенную функцию: https://github.com/javaee/jaxb-v2/issues/103 (см. Описание)
Есть ли свойство для настройки JAXB для этого? Это было исправлено в MOXy?
В настоящее время я перебираю объект, который нужно маршалировать, и извлекаю все классы, которые должны быть связаны в Class[] classesToBeBound
. Затем я создаю новый JAXBContext.newInstance(classesToBeBound)
Неиспользуемые пространства имен теперь не включены в XML.
Я знаю, что валидация XML действительна даже для неиспользуемых пространств имен, но для меня это то, что должна обрабатывать инфраструктура.
Следующая ссылка https://blogs.oracle.com/enterprisetechtips/entry/customizing_jaxb упоминает различные исправления (где-то посередине текста), но при попытке найти решение в этих ссылках либо ссылка не работает, либо никто не решил Это.
Любые комментарии приветствуются.
(РЕДАКТИРОВАТЬ) Простой текст:
ДАНО
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 будет
<foo xmlns="something1" xmlns:user="user">
<user:name>Bob</user:name>
</foo>
НО АКТУАЛЬНО (обратите внимание на пространство имен some2)
<foo xmlns="something1" xmlns:user="user" xmlns:bar="something2">
<user:name>Bob</user:name>
</foo>
Конечно, это упрощенный пример, и наша спецификация типа имеет около 30 различных пространств имен.