# JAXB: Klassen mit Annotation Lesen/Schreiben XML



## kama (3. Nov 2010)

Hallo,

ich habe mit JAXB angefangen und versuche mir gerade ein ganz ganz einfaches Beispiel zusammen zu bauen...

Habe einfach eine Klasse erstellt:


```
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlType(name = "Configuration")
public class Configuration {

	private String name;
...
        getter/setter
        equals, hasCode()
```
So weit so gut...

Jetzt möchte ich eine XML Ausgabe erzeugen (1. Schritt)....und später auch einlesen (2. Schritt) und schreiben eines XML Files ...

So weit ich das bis jetzt verstanden habe muss ich per schemagen ein Schemata erzeugen...mit dem ich dann wieder per xjc eine Factory erzeugen kann.....aber da wird dann auch nochmal die Klasse Configuration erzeugt...?

Da wäre die erste Frage: Gibt es eine Möglichkeit die Erzeugung der Klasse Configuration zu verhindern(Hilfe auf der Comand line sieht nicht danach aus)?

Ich habe ein Maven Plugin für xjc gefunden aber bisher keines für den "schemagen" Teil ? Oder habe ich einfach nur was übersehen?

Das Ganze möchte ich selbstverständlich im Maven build machen...und nicht selbst per Kommandozeile aufrufen....

Vielen Dank im Voraus.

Gruß
Karl Heinz Marbaise


----------



## mvitz (3. Nov 2010)

Habe zwar noch nicht 100% verstanden, was du gerne möchtest, aber hier mal ein Anfang:

1) Ja, du brauchst ein XML Schema um daraus per XJC dir Klassen/Factories zu generieren, zumindest über den Contract-First Ansatz. Deine so geschriebene Klasse kannst du nun auch direkt sowohl erzeugen (Marshalen) als auch das daraus generierte XML einlesen (Unmarshal).

2) Solltest du aus einem XML Schema per XJC Klassen generieren, obwohl du von diesen bereits Quelltext besitzt, so kannst du per JAXB Binding File auch das generieren dieser Klasse verhindern (sofern du JAXB 2.0 einsetzt). Zu den Binding Files empfehle ich: Customizing JAXB Bindings und https://jaxb.dev.java.net/tutorial/section_5_1-Customizing.html#Customizing


----------



## kama (4. Nov 2010)

Hallo,



mvitz hat gesagt.:


> Habe zwar noch nicht 100% verstanden, was du gerne möchtest, aber hier mal ein Anfang:


Nachdem ich das Heute Morgen auch nochmal gelesen habe, muss ich Dir leider zustimmen sehr unklar ausgedrückt...;-(...sorry....

Ich versuche es nochmal klarer zu formulieren:

Problem: Kann ich auch OHNE Schemata Erzegung und XJC Aufruf etc. XML Files schreiben und lesen?

Nach genauerer Analyse der Quellen habe ich eine Lösung gefunden:

```
Configuration configuration = new Configuration();
               configuration.setName("ThisIsATest");
               JAXBContext context = JAXBContext.newInstance(Configuration.class);
               Marshaller m = context.createMarshaller();
		m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
		m.marshal(configuration, System.out);
```

Das geht dann auch mit dem lesen....
Das bedeutet für mich zuerst einmal ich muss nicht kein Schemata erzeugen etc. sondern kann direkt XML Files schreiben/lesen...

Was mir weiterhin aufgefallen ist, dass für XJC eine Maven Plugin gibt aber für schemagen leider nicht?...

Weiterhin vielen Dank für die Hinweise bzgl. der Links etc.

Gruß
Karl Heinz Marbaise


----------



## mvitz (4. Nov 2010)

Ja, wie du schon festgestellt hast, geht es auch ohne Schema, so lange du deine Klassen mit den JAXB Annotationen annotierst. Schreiben geht so wie du das oben beschrieben hast, lesen dazu analog mit dem Unmarshaler.

Zu dem Problem mit dem Schemagen kann ich dir leider nicht weiterhelfen, habe dies noch nicht genutzt.


----------

