Frage

Ich bin ein homebrew Subprotokoll von XMPP Implementierung und ich verwende Kombination von StAX und JAXB für das Parsen / Rangier mesages. Und wenn ich eine Nachricht marshall mich mit vielen unneded Namespace-Deklarationen am Ende:

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

statt:

   <ns:auth xmlns:ns="urn:ietf:params:xml:ns:ilf-auth>compton@ilf</ns:auth>

Gibt es eine Möglichkeit, dass der zu verwandeln?

All diese Namensräume in verschiedenen Nachrichten verwendet, die von JAXB erhalten vermarshallten / entordnet, aber jede Nachricht verwendet einen Namespace.

PS. Ich bin kein Experte XML mir bitte nicht schimpfen, wenn ich einige dumme Fehler gemacht hast;)

War es hilfreich?

Lösung

Die Funktionalität die Sie suchen, wurde als eine Erweiterung auf der JAXB issue tracker angefordert in Ausgabe . Die Erweiterung wurde abgelehnt, da die JAXB Autoren des Objektbaum zu durchqueren einmal mehr es zu teuer finden, bevor die eigentliche Serialisierung beginnt zu bestimmen, welche Namespaces sind tatsächlich erforderlich ist.

Obwohl ziemlich aufgebläht, die unnötigen Namensräume sind ungültig nicht das XML-Dokument. Wenn Sie wirklich die wenigen Bytes speichern müssen und die zusätzliche Rechenaufwand ist erschwinglich, sollte es recht einfach sein, Ihre eigenen XML-Prozessor / Filter zu schreiben, die die JAXB Ausgang nimmt, analysiert das Dokument und schreibt ein neues Dokument ohne den nicht verwendeten Namespace-Definitionen .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top