2010-11-29 17 views
1

Beim Marshalling einiger Objekte in XML muss ich ein zusätzliches Feld in jedes der resultierenden XML-Objekte einfügen - Art der Markierung. Der Zweck besteht nicht darin, die Quellobjekte zu ändern, sondern diese Informationen in die XML-Ausgabe einzufügen.Fügen Sie zusätzliche Felder in JAXB-Marshalling ein

Irgendwelche Ideen, wenn das möglich ist?

+0

Auf welchen Objekttyp (StAX, SAX, DOM, Stream) wird das XML gerendert? Ist der zusätzliche Inhalt auf der Grundlage der Objektdaten oder getrennt wie ein Zeitstempel oder Autor? –

+0

Ich marshalle Java-Objekte in XML wahrscheinlich mit DOM, aber noch nicht entschieden. Der zusätzliche Inhalt ist etwas außerhalb des Objekts, ist ein neues Feld, das angibt, ob sich das Objekt geändert hat. –

Antwort

3

Es gibt einige mögliche Ansätze:

1. Verwenden Sie ein XMLAdapter

Sie JAXB nutzen konnte XMLAdapter Jahren. Hier würden Sie eine Version der Klassen mit dem zusätzlichen Feld erstellen (die angepassten Klassen könnten das Original erweitern). Dann wandle zwischen ihnen im Adapter um. Da die alternative Version der Klasse das zusätzliche Feld enthalten würde, würde sie herausmarschieren.

2. Verwenden Binder

Wenn Sie Marschall Ziel DOM ist, nutzen Sie könnten dann Binder JAXB. Es ist für die Erhaltung von Infosets gedacht, aber nach einem Marshal hält es eine Verbindung zwischen den Objekten und den DOM-Knoten aufrecht. Sobald der Marshal vollendet ist, können Sie den Ordner verwenden, um den zugehörigen Knoten eines Objekts zu finden und zu aktualisieren.

3. Wickeln Sie das Ausgabeziel

Wenn Ihr Ausgabeziel so etwas wie ein Content oder XMLStreamWriter ist dann, wenn der entsprechende Zustand erreicht ist Sie zusätzliche Ereignisse auslösen könnte zu sein rief das verschachtelte Marshaltziel auf.

+0

Große Antwort. Danke vielmals. –

1

Der einfachste Weg, den ich mir vorstellen kann, wäre, JAXB zu verwenden, um zu einem DOM zu marshallen und dann programmatisch Ihre zusätzlichen Informationen in dieses DOM einzufügen und dann das DOM zu XML neu zu marshallen.

Hässlich und ineffizient, aber das ist das Beste, was ich mir vorstellen kann.

Verwandte Themen