# File objekt in xml speichern?



## JaireMichel (26. Jun 2008)

Hallo,

ist es möglich File objekte anstatt die VErzeichnis-Strings in xml files zu speichern und diese auszulesen als File objekte?


----------



## Niki (26. Jun 2008)

Ja, die werden als Base64 gespeichert. Dafür empfielt sich ein xml-Binding Framework wie z.B. jaxb oder XMLBeans. Du kannst die Kodierungen auch selber machen. Ich glaub im commons-codec befindet sich ein Base64En- und Decoder.


----------



## JaireMichel (3. Jul 2008)

Niki hat gesagt.:
			
		

> Ja, die werden als Base64 gespeichert. Dafür empfielt sich ein xml-Binding Framework wie z.B. jaxb oder XMLBeans. Du kannst die Kodierungen auch selber machen. Ich glaub im commons-codec befindet sich ein Base64En- und Decoder.



hoi du,

ich benutze eh schone JAXB 2.x doch lese ich in meinem Buch nichts von File in xml speichern Möglichkeiten?? Wenn ich google benutze und suche nach: xml file kommt natürlich nur wie man eine xml datei speichert...

Hast du ein Codefragment/Beispiel?


----------



## Niki (4. Jul 2008)

Du hast doch sicher ein XML-Schema. Da musst du einfach den Typ des Feldes als *base64Binary* definieren.
Könnte so aussehen:

```
<complexType name="ContentType">
		<sequence>
			<element name="FileName" type="string"/>
			<element name="Content" type="base64Binary"/>
		</sequence>
	</complexType>
```
In der JavaKlasse die generiert wird, wird dann für Content ein byte-Array definiert. Dieses ist der Inhalt deiner Datei. Setzen wirst du das ganze dann ca. so müssen:

```
File f = new File("...");
byte[] b = new byte[(int)f.length()];
FileInputStream fis = new FileInputStream(f);
fis.read(b);
fis.close();
//erzeugen der JAXB-Klasse, weiß nicht genau ob es dafür eine Factory oder was ähnliches gibt
ContentType contentType = new ContentType();
contentType.setFileName(f.getName());
contentType.setContent(b);
```

Das ist alles


----------



## JaireMichel (4. Jul 2008)

Niki hat gesagt.:
			
		

> Du hast doch sicher ein XML-Schema. Da musst du einfach den Typ des Feldes als *base64Binary* definieren.



Nein  :lol: 

Weiß jetzt nicht genau warum ich da ein Schemata entwerfen muss für ne xml datei für ein desktop app ?


----------



## Wildcard (4. Jul 2008)

Wie verwendest JaxB wenn du kein Schema hast?
Wodurch ist deine Datenstruktur beschrieben wenn nicht durch ein Schema?
Wie validierst du deine XML Dateien wenn nicht mit einem Schema?


----------



## JaireMichel (4. Jul 2008)

Wildcard hat gesagt.:
			
		

> Wie verwendest JaxB wenn du kein Schema hast?
> Wodurch ist deine Datenstruktur beschrieben wenn nicht durch ein Schema?
> Wie validierst du deine XML Dateien wenn nicht mit einem Schema?



Ich habe ein Klasse mit variablen +get/set Methoden. Erstelle davon ein objekt und speichere/lade eine xml datei
mit z.B.: 


```
JAXBContext jc = JAXBContext.newInstance(Person.class);
           Unmarshaller um = jc.createUnmarshaller ();           
	       Object o = um.unmarshal(new FileInputStream("daten.xml"));
```

was würde mir denn noch fehlen?


----------



## Wildcard (4. Jul 2008)

Ich habe noch nie gehört das man JaxB auch so benutzen kann (ich bin da sowieso eher der EMF Anhänger).
Normalerweise lässt du dir von JaxB die Java Klassen für ein bestehendes XML Schema erstellen.


----------



## JaireMichel (19. Aug 2008)

Wildcard hat gesagt.:
			
		

> Normalerweise lässt du dir von JaxB die Java Klassen für ein bestehendes XML Schema erstellen.



sorry war etwas außerhalb bin jetzt back :wink: 

gibt es für das schema generien tools? Wie generiere ich ein JAXB Schema und dann anschließt die java Klassen? Ich habe meine .xml Datei nie validiert!?


----------



## JaireMichel (19. Aug 2008)

Hier in diesem Beispiel:

wird einfach das schema books.xsd erzeugt und ur-plötzlich sind die attribute wie id,name,isbn da in der java klasse books ohne dass dies so irgendwo vorgegeben war, wie kann das sein???

quelle: http://java.sun.com/developer/technicalArticles/WebServices/jaxb/index.html



> xjc.sh -p test.jaxb books.xsd -d work
> 
> The -p option identifies a package for the generated classes, and the -d option identifies a target directory. So for this command, the classes are packaged in test.jaxb within the work directory.
> 
> ...


----------



## Niki (20. Aug 2008)

Es gibt bei den Bibliotheken Tools mit denen man sich eben aus einer xsd Datei die Java Klassen generieren kann.
Ich hab einmal eine Anleitung für XML und Java mittels XMLBeans geschrieben. Schau dir das halt einmal an: XMLBeans_Anleitung


----------



## JaireMichel (20. Aug 2008)

Niki hat gesagt.:
			
		

> Es gibt bei den Bibliotheken Tools mit denen man sich eben aus einer xsd Datei die Java Klassen generieren kann.
> Ich hab einmal eine Anleitung für XML und Java mittels XMLBeans geschrieben. Schau dir das halt einmal an: XMLBeans_Anleitung



das ist klar... nur wie erstelle ich die .XSD Datei?


----------



## Niki (21. Aug 2008)

Eintippen ist ein heißer Tipp 
irgendwas musst du schon machen, die Informationen kann sich das Programm ja nicht aus den Fingern saugen. Das XML-Schema beschreibt dir ja die Struktur deiner XML Objekte. Das ist daher der Einsprungspunkt.


----------

