Hat es jemand jemals geschafft, unbenutzte Namespaces während des Marshalls eines Objekts mit JAXB zu entfernen? Hier ist eine Verknüpfung des angeforderten Features: https://java.net/jira/browse/JAXB-103 (siehe Beschreibung)Wie verhindert man, dass JAXB beim Marshalling unbenutzte Namespaces schreibt
Gibt es eine Eigenschaft für die Konfiguration von JAXB? Wurde dies in MOXy behoben?
Ich durchquere gerade das Objekt, das gemarshallt werden muss und extrahiere alle Klassen, die in Class [] classesToBeBound gebunden werden müssen. Dann erstelle ich einen neuen JAXBContext.newInstance (classesToBeBound)
Die nicht verwendeten Namespaces sind jetzt nicht in der XML enthalten.
Ich weiß, dass XML-Validierung auch mit den nicht verwendeten Namespaces gültig ist, aber für mich ist dies etwas, das ein Framework behandeln sollte.
Der folgende Link https://blogs.oracle.com/enterprisetechtips/entry/customizing_jaxb erwähnt verschiedene feste (irgendwo in der Mitte des Textes), aber beim Versuch, die Lösung in diesen Links zu finden, ist entweder der Link kaputt oder niemand hat es wirklich gelöst.
Kommentare sind willkommen.
(EDIT) Klartext:
GEGEBEN
a new instance of JAXBContext and add 2 classes with each a separate namespace.
WENN
marshalling a class that has these 2 classes as a property but only 1 of them is not null
DANN
I expect only the namespace of the property that is not null to be visible in the XML.
aber die tatsächliche ist
that both namespaces are in the xml.
Also meine Frage war, wie kann ich JAXB entfernen oder sagen, nicht die nicht verwendeten Namespaces zu schreiben?
Um es in Java-Code zu setzen:
GEGEBENpublic class Foo{
private Bar bar; //namespace something2
private User user; //namespace user
}
WENN
JAXBContext c = JAXBContext.newInstance(Foo.class, Bar.class, User.class);
...
Foo foo = new Foo();
foo.setBar(null);
foo.setUser(new User("Bob"));
marshaller.umarshal(foo);
dann erwarte ich die xml
<foo xmlns="something1" xmlns:user="user">
<user:name>Bob</user:name>
</foo>
aber die tatsächliche ist (Anmerkung sein der namespace something2)
<foo xmlns="something1" xmlns:user="user" xmlns:bar="something2">
<user:name>Bob</user:name>
</foo>
Natürlich ist dies ein vereinfachtes Beispiel und unsere Spezifikation eines Typs hat ungefähr 30 verschiedene Namespaces.
Ich bin mir nicht sicher, ob ich Ihr Problem richtig verstehe. Möchten Sie alle nullwertigen Attribute aus dem resultierenden XML entfernen? Und das ist nicht ein Duplikat von http://stackoverflow.com/questions/11215485/jax-ws-to-remove-empty-tags-from-request-xml – Ota