Java [JAXB,XJC] fehlende XmlRootElement-Annotation beim Java-Binding einer xsd

mental.dIseASe

Lieutenant
Registriert
Dez. 2008
Beiträge
665
Guten Abend,

ich habe vor mir zwei Bindings für die xsd von pain.001.003.03, also Sepa-Gutschriften in Version 2.7, zu liegen. Generiert wurden diese möglicherweise mit dem XJC-Plugin für Eclipse/STS:

Einmal PaymentInstructionInformationSCT:
Code:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "PaymentInstructionInformationSCT", propOrder = {
    "pmtInfId",
    "pmtMtd",
    "btchBookg",
    "nbOfTxs",
    "ctrlSum",
    "pmtTpInf",
    "reqdExctnDt",
    "dbtr",
    "dbtrAcct",
    "dbtrAgt",
    "ultmtDbtr",
    "chrgBr",
    "cdtTrfTxInf"
})
public class PaymentInstructionInformationSCT {
und einmal CreditTransferTransactionInformationSCT:
Code:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "CreditTransferTransactionInformationSCT", propOrder = {
		"pmtId",
		"pmtTpInf",
		"amt",
		"chrgBr",
		"ultmtDbtr",
		"cdtrAgt",
		"cdtr",
		"cdtrAcct",
		"ultmtCdtr",
		"purp",
		"rmtInf"
})
@XmlRootElement(name = "CdtTrfTxInf")
public class CreditTransferTransactionInformationSCT {

Mein eigentliches Problem ist jetzt, dass PaymentInstructionInformationSCT nicht mit einer XmlRootElement-Annotation versehen wurde wie der CreditTransfer. In einem Stück Parser-/Importer-Code wird diese Annotation abgefragt, was bei der PaymentInstruction dann schief/null geht. Ich kann aber keinen Unterschied in der Art und Weise erkennen, wie diese beiden Typen in der xsd definiert sind. Beide sind complex und beide werden dort, wo sie referenziert werden, mit maxOccurs="unbound" verwendet.

Es besteht keine Möglichkeit, die generierte Klasse oder den Importer manuell zu ändern und die xsd ist sowieso tabu. Kann sich also jemand erklären, wieso eins mit und eins ohne XmlRootElement-Annotation generiert wird? Oder kann es jemand nachstellen? Oder muss man bei diesen Generatoren irgendeine Magic konfigurieren, die ich noch nicht kenne?

Ist vielleicht etwas speziell, aber vielleicht hatte ja jemand schonmal mit derlei Kram zutun und hat Lust, an einem Freitagabend in einer xsd zu schmökern. :D
 
Also ich habe das XSD durch den xjc gejagt (2.2.4-2) und bei mir haben beide Klassen kein XmlRootElement (was ich nach Prüfung des XSD auch so erwarten würde - xjc generiert XmlRootElements nur wenn wirklich benötigt).

Also mein Ansatz wäre es den Code der die XmlRootElement Annotation erwartet zu ändern (da dieser Code einfach falsch ist). Wenn das - aus welchen Gründen auch immer - nicht geht gibt es verschiedene Varianten wie man die Generierung erzwingen kann laut stackoverflow - am besten eine der dort beschriebenen Methoden versuchen.

lg, Heli

PS: Wieso finde ich SEPA und PAIN immer so passend?
 
Kannst du mich vielleicht sanft auf die richtigen stackoverflows stubsen? Ich hatte da irgendwie nicht so richtig Fruchtbares gefunden.

Und ja: SEPA und pain kann kein Zufall sein. :)
 

Ähnliche Themen

Antworten
3
Aufrufe
1.172
Zurück
Oben