JAXB + Eclipse

meni

Mitglied
Hallo Leute.

Folgende Frage: Ich erstelle eine Instance von JAXBContext mit den einzelnen Klassennamen.
Nun wollte ich aber Klassen von einem externen Plug-In hinzufügen. Das ist ja erstmal kein Problem (via Extension Points).
Jedoch kann der Unmarshaler keine Instanz dieser Klassen erzeugen, da sie sich in einem externen Plug-In befinden.

Kennt evtl. jemand eine Lösung?! Evtl. über Extension Points?

Hintergrund ist: Ich habe eine Annotation @XmlAnyElement(lax=true) . Sprich er soll Klassen erstellen die bekannt sind. Diese Klassen sind aber erweiterbar. Sprich es können in Zukunft neue dazukommen, über neue plug-ins via extension points.

Hoffe Ihr könnt mir helfen.

mfg
 
Wir haben eine ähnliche Problematik damit gelöst, dass der Core dynamisch eine Liste von Packages bekommt, in denen JAXB Klassen drinliegen. Dazu brauchst eine Art Modulsystem / Registrierungsmöglichkeit für Plugins (in unserem Fall über Spring und Hera abgebildet). Dann kannst den Kontext erzeugen und ihm die Liste der bekannten Packages mitgeben und es sollte tun.

Gruß
Ollie
 
Hey!

Danke! Habs nun mit deinem Tipp geschafft.

=> Ich benutze das Eclipse-Buddy-Classloading!

Ich hätte noch eine weitere Frage: Ich teile dem Kontext alle bekannten Klassen mit (spart die ObjectFactory Klasse), jedoch habe ich Probleme bei den Klassennamen:

Habe ich z.B. eine Klasse mit Namen ToggleXyz , wird Diese vom Unmarshaler NICHT gefunden. Lautet diese jedoch : Togglexyz wird Diese gefunden. Also ist alles wohl von der Schreibweise des Klassennamens abhängig. Ich meine, es ist nicht weiterhin schlimm, die Klassennamen klein zu halten, aber so muss man dem Plug-in Entwickler mitteilen, den Klassennamen nach bestimmten Regeln zu wählen.

Evlt. gibts da noch nen Kniff?!

Gruß,
meni
 
Zuletzt bearbeitet:
Ich hätte noch ein Problem:

Nachdem ich wieder marshale, erhalte ich jeweils zwei Elemente mit folgenden Formaten:

Code:
.
.
.
<myelement/>
<mye xsi:type="myelement" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
.
.
.

Warum? Eigentlich sollte das erste nur sein.

meni
 
Zurück