2009-11-04 19 views
11

Estoy implementando un subprotocolo homebrew de XMPP, y estoy usando la combinación de StAX y JAXB para analizar sintácticamente/ordenar los mensajes. Y cuando Marshall un mensaje que terminan con un montón de declaraciones de espacios de unneded:JAXB adjuntando declaraciones de espacio de nombres innecesarias a las etiquetas

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

en lugar de:

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

¿Hay alguna manera de convertir la de?

Todos estos espacios de nombres se usan en diferentes mensajes que JAXB ordena o desasigna, pero cada mensaje usa un espacio de nombre.

PS. No soy un experto en XML, por favor no me desanime si cometí un error estúpido;)

+0

Esto es completamente inaceptable para los documentos legales que deben conservarse durante el transporte para mantener su integridad. JAXB es una forma de hacer que las cosas simples sean más complejas –

+0

JAXB hace que el análisis/producción de XML sea más fácil. Hice un proyecto que usa tanto JAXB como dom4j (en dos partes diferentes) y la diferencia es grande. –

Respuesta

10

La funcionalidad que está buscando se solicitó como una mejora en el rastreador de problemas JAXB en issue 103. La mejora fue rechazada, ya que a los autores de JAXB les resulta demasiado caro atravesar el árbol de objetos una vez más antes de que la serialización real comience a determinar qué espacios de nombres son realmente necesarios.

Aunque bastante hinchado, los espacios de nombres innecesarios no invalidan el documento XML. Si realmente tiene que guardar los pocos bytes y el coste de cálculo adicional es asequible, debería ser bastante fácil escribir su propio procesador/filtro XML, que toma la salida JAXB, analiza el documento y escribe un nuevo documento sin las definiciones de espacio de nombres no utilizadas .

+2

[XSLT para realizar esta transformación] (http://stackoverflow.com/a/4594626/2019259), y si está usando CXF: http://cxf.apache.org/docs/xslt-feature.html –

Cuestiones relacionadas