JAXB добавляет ненужные объявления пространства имен в теги

Я реализую подпротокол homebrew XMPP, и я использую комбинацию StAX и JAXB для разбора/сортировки сообщений. И когда я отправляю сообщение, я получаю множество незанятых деклараций пространства имен:

   <ns2:auth xmlns:ns2="urn:ietf:params:xml:ns:ilf-auth" 
   xmlns:ns4="ilf:iq:experiment:power" xmlns:ns3="ilf:iq:experiment:init" 
   xmlns:ns5="ilf:iq:experiment:values" xmlns:ns6="ilf:iq:experiment:result" 
   xmlns:ns7="ilf:iq:experiment:stop" xmlns:ns8="ilf:iq:experiment:end">
   [email protected]</ns2:auth>

вместо:

   <ns:auth xmlns:ns="urn:ietf:params:xml:ns:ilf-auth>[email protected]</ns:auth>

Есть ли способ превратить это?

Все эти пространства имен используются в разных сообщениях, которые сортируются/немаркируются JAXB, но каждое сообщение использует одно пространство имен.

PS. Я не эксперт по XML, пожалуйста, не пишите мне, если я сделал какую-то глупую ошибку;)

Ответ 1

Запрошенная функциональность была запрошена как усовершенствование трекера JAXB в проблема 103. Усовершенствование было отклонено, так как авторы JAXB считают слишком дорогим, чтобы пройти дерево объектов еще раз, прежде чем фактическая сериализация начнет определять, какие пространства имен действительно требуются.

Несмотря на довольно раздутые, ненужные пространства имен не являются недействительными для документа XML. Если вам действительно нужно сохранить несколько байтов, а дополнительные вычислительные затраты являются доступными, должно быть довольно легко написать собственный XML-процессор/фильтр, который берет вывод JAXB, анализирует документ и записывает новый документ без неиспользуемых определений пространства имен,