# Klassen aus XML-Schema generieren und füllen



## Tsunamie (4. Mrz 2008)

Hallo Ihr lieben,
ich habe da ein kleines Problem. Ich arbeite zurzeit an einem Framework zur Gestalltung von MUDs. Jetzt habe ich mir überlegt alle Beschreibungen (Gegenstände, Räume etc.) als XML-Datei zu speichern und zur Laufzeit einzulesen. Das klappt auch, nur: ich möchte dem Entwickler nicht vorschreiben welche Attribute z.B. seine Gegenstände haben sollen...

Meine Überlegung war nun: Klassenstruktur der Items in einer Schema-Datei zu beschreiben und dann die einzelnen Instanzen aus einer XML-Datei zu erzeugen...

Etwas in der Art:

Item <- Item.xsd

Item item1 = new Item(items.xml);

sehr einfach dargestellt!


Ist sowas überhaupt möglich? Und wenn ja, wie bitte? Ich habe mir schon JAXB angesehen, nur weiß ich nicht ob mir das so unbedingt weiter hilft!

Ach so, die Krönung wäre natürlech wenn es möglich wäre verschiedene Typen von Items noch zu unterscheiden, ihnen auch unterschiedliche Attribute zu zuweisen  :lol: 


Naja, vielleicht weiß hier ja wer Rat...


MFG
Tsunamie


----------



## byte (4. Mrz 2008)

Du willst also dynamisch zur Laufzeit Code generieren. Was versprichst Du Dir davon?

Wenn es nur um verschiedene (XML-) Attribute geht, kannst Du ja recht einfach eine generische Klasse dafür schreiben, die beliebige Properties (Name-Wert-Paare) über eine Map hält.


----------



## Tsunamie (4. Mrz 2008)

Naja, ich kann dann z.B. meine Items nur über XML erweitern und muss dem Anwender nicht aufdrücken selber Java-Klassen zu schreiben...


----------



## Niki (4. Mrz 2008)

Ich glaub nicht dass er Code zur Laufzeit generieren möchte, er möchte zur Laufzeit dynamisch Objekte aus XML-Dateien erzeugen können. JAXB ist da eine Möglichkeit eine andere, die mir mehr gefällt sind die XMLBeans. Wie es da mit Vererbung ausschaut kann ich dir aber nicht sagen. Einfach ausprobieren ob es deinen Ansprüchen genügt.


----------



## byte (4. Mrz 2008)

> ich möchte dem Entwickler nicht vorschreiben welche Attribute z.B. seine Gegenstände haben sollen...


Das bedeutet aber, dass sich das XML-Schema verändert, was auch wiederum die gebundene Klasse verändern würde. Es geht also nicht bloß ums Serialisieren von Daten per XML.

@Tsunamie: Was willst Du denn dann mit diesen vom Benutzer angepassten Items machen? Welchen Sinn verfolgst Du damit?


----------



## ARadauer (4. Mrz 2008)

generell ist es sicher nicht falsch wenn man sich mal allgemein in die Reflection einließt


----------



## Tsunamie (4. Mrz 2008)

Der Benutzer soll das Spiel seinen Bedürfnissen anpassen können. Wenn er also möchte das ein z.B. ein Stein Schaden machen kann soll er dem Stein maxDam und minDam geben können (wie auf diese unbekannten Werte zugegriffen wird ist ein anderes Thema ;-) ).

Ich denke ich werds erstmal mit der Map versuchen oder einfach den Benutzer etwas einschränken 


LG
Tsunamie


----------



## byte (4. Mrz 2008)

Ansonsten halt JAXB verwenden. Damit kannst Du aus einem Schema die Java-Klassen automatisch generieren. Diese kannst Du dann mit den Daten aus den XML-Daten füttern.
Zur Laufzeit wird Dir das nur wenig nützen.


----------



## Tsunamie (4. Mrz 2008)

Ok, ich danke erstmal allen die geantwortet haben!
Ich werd mal mit JAXB rumspielen oder eben doch alles hardcoden ;-)

Danke nochmal!


LG
Tsunamie


----------



## Niki (4. Mrz 2008)

Ich lege dir nochmal XMLBeans nahe. Die API ist einfach angenehmer als bei JAXB


----------



## Wildcard (4. Mrz 2008)

Das funktioniert mit EMF. Du kannst dort ein Model dynamisch zur Laufzeit definieren und damit XML einlesen und auch wieder rausschreiben.

Zweite Möglichkeit:
Den statischen Teil deines Models von EMF generieren zu lassen und dann dynamisch Attribute und Referenzen hinzufügen (EClass erstellen, ESuperType setzen, Feature hinzufügen).

Dritte Möglichkeit:
Ein EMF Modell aus einer XSD generieren und das Schema erweiterbar machen (XS:ANY). Die zur Compile-Zeit unbekannten Werte bekommst du dann in einer Feature Map abgelegt.


----------

