Tool für XSD-POJO-Mapping zur Laufzeit

eagle1985

Mitglied
Hallo zusammen,

weiss jemand ob es ein Tool giebt welches XSD-Schemas zur Laufzeit mappen kann und ein Objekt davon erstellen kann welches anschliessend befüllen kann um ein entpsrechendes XML daraus generieren zu können welches auf das Schema passt?

Dies sollte zur Laufzeit möglich sein, da ich den genauen Inhalt des XSD-Files nicht kenne und dieser Varieren kann.
Was jedoch bekannt ist, sind die einzelnen Bausteine (Typen) welche im XSD verwendet werden können, jedoch nicht in welcher Reihenfolge diese drin sein müssen oder wie oft diese Vorkommen.

Habe mir mal XMLBeans von Apachee angesehen, geht in die gewünschte Richtung, jedoch muss man hier das XSD-Parsen, welches anschliessend in ein Jar gepackt wird welches dem Projekt hinzugefügt werden muss. Daher nicht so ganz geeignet.

greez eagle
 
Hallo,

leider verstehe ich den Hintergrund deines Vorhabens nicht ganz.
Wenn du zur Laufzeit ein XML Schema lädst hast du die Strukturinformationen - sprich wie sollen valide XML-Dokumente aussehen.
Wenn du nun damit dynamisch Java Klassen generierst, so "kennst" du die ja eigentlich nicht. Du kannst also nur generisch per
Reflection mit diesen neu generierten Klassen arbeiten (nachdem du die generierten Klassen dynamisch zum Laufzeit-Classpath hinzugefügt hast),
sowie diese dann anschließend über ein generiertes XML Mapping (beispielsweise per JAXB oder dem von dir genannten XMLBeans) rausschreiben.

Beim Rausschreiben wird dann nochmal zusätzlich überprüft, ob die Struktur deines dynamisch erzeugten
Objektes bezüglich dem ihm zugrundeliegenden XMLSchema valide ist.

Beschreib doch bitte noch ein wenig genauer was du machen möchtest und gib mal ein paar Beispiele.

Ansonsten wäre vielleicht noch Eclipse-EMF was für dich:
http://wiki.eclipse.org/Authoring_XML_Schemas_for_use_with_EMF

Damit kannst du aus einem XMLSchema (über eine Transformation zu einem ecore Model) ein generisches Objektmodell
generieren dass du zur Laufzeit manipulieren und validieren kannst. Du kannst das dann auch wieder im XML Format speichern.
Ob das dann aber noch konform zu deinem XML Schema ist wage ich zu bezweifeln.

Gruß Tom
 
dass mit dem kennen habe ich vieleicht unggünstig gesagt.
Bestimmte Elemente des XML sind vordefiniert, also bekannt. Diese müssen zwingend im XML sein.

Hinzu kommen jedoch eventuell noch weitere Elemente welche im XSD-File definiert sind, diese sind ja erst nach dem einlesen des XSD-Files "bekannt", was ja zur Laufzeit passieren soll. Da je nach gewünschtem Output doer vorgaben, dass XSD-File anders aufgebaut ist und es jederzeit änderungen geben kann würde ich dies gerne Dynamisch aufbauen und die Klassen via getClassforName nachladen oder so was.

Anschliesend sollen die Daten gefüllt werden und ein zu dem Schema valides XML-File erstellt werden.

Ziel ist es dass das Mapping auch funktioniert wenn änderungen am XSD-File gemacht werden ohne, dass alle Klassen überarbeitet werden müssen.

Es sind ca 200 verschiedene XSD-Files und soferne nicht notwenig würde ich ungern für alle eine eigne Klasse schreibne müssen
 
oder kann man mit JAXB, XMLBeans, Castor, Simple, ....

eventuell auch sehr vereinfachte Klassen respektive Objekte davon erstellen?

so nach folgendem Beispiel:

Code:
public class XMLElement
{
  private String name;
  private XMLElement[] childs;
  prvate Enum eValue;
  private Object value;

  ...

}

und einfach alle XSD Typen darauf Mappen?

XSD-kann folgendermassen aussehen
Code:
<xsd:complexType name="Person">
  <xsd:sequence>
    <xsd:element name="Name" type="xsd:string"/>
    <xsd:element name="Vorname" type"xsd:string"/>
  </xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="Sprache">
  <xsd:restriction base="xsd:string">
    <xsd:enumeration value="D"/>
    <xsd:enumeration value="F"/>
    <xsd:enumeration value="I"/>
    <xsd:enumeration value="E"/>
  </xsd:restriction>
</xsd:simpleType>
 
Zurück