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;)

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top