JAXB acrescentando desnecessários namespace declarações a tags
-
16-09-2019 - |
Pergunta
Estou implementando um subprotocol homebrew de XMPP, e eu estou usando combinação de StAX e JAXB para análise / triagem mesages. E quando eu marshall uma mensagem eu acabar com cargas de declarações de namespace unneded:
<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">
compton@ilf</ns2:auth>
em vez de:
<ns:auth xmlns:ns="urn:ietf:params:xml:ns:ilf-auth>compton@ilf</ns:auth>
Existe alguma maneira de transformar a de?
Todos estes namespaces são usados ??em mensagens diferentes que são mobilizados / unmarshalled por JAXB, mas cada mensagem usa uma namespace.
PS. Eu não sou um especialista em XML, por favor não faça discurso me se eu fiz alguma erro estúpido;)
Solução
A funcionalidade que você está procurando foi solicitada como um reforço no issue tracker JAXB em questão 103 . A melhoria foi recusado, uma vez que os autores JAXB achar que é demasiado caro para atravessar a árvore de objetos, mais uma vez antes do início de serialização reais para determinar que namespaces são realmente necessários.
Embora bastante inchado, os espaços de nomes desnecessários são não invalidar o documento XML. Se você realmente tem que salvar os poucos bytes eo custo computacional extra é acessível, deve ser bastante fácil de escrever o seu próprio processador XML / filtro, o que leva a saída de JAXB, analisa o documento e escreve um novo documento sem as definições de namespace não utilizados .