# Datenstruktur in XML-File schreiben



## LusH (21. Jun 2012)

Hallo Programmierer 

Ich habe angefangen einen kleinen Vokabeltrainer in Java zu schreiben.
Ich habe mir überlegt (zunächst einmal) einfach die Vokabeln in ein XML-File zu schreiben.

An Datenstrukturen gibt es nicht viele:
- Vocab
- VocabList
- FileFactory
  (stellt momentan Funktionen bereit, um in eine XML-Datei zu schreiben, zu lesen und ein Verzeichnis zu erstellen)

Bis auf eines klappt das soweit auch alles:
Die Klasse Vocab verwaltet intern 2 Strings - Vokabel  Übersetzung
Wenn ich nun eine Vokabel in eine VocabList einfüge, und diese dann in ein XML File schreibe, enthält das XML File nur die Übersetzung. Ich weiß bloß nicht warum ?

Ich bin mir ziemlich sicher, dass es nicht sonderlich gern gesehen wird, wenn jemand hier sämtlichen Code seiner Klassen postet, weil das wohl die Übersichtlichkeit immens beeinträchtigt, weil ich mir sicher bin, dass der Fehler in der Klasse Vocab zu suchen ist, hier mal die Klasse:


```
public class Vocab {
    
    public final static String DEFAULT_VALUE = "Default";
    
    // Instance-Variables  
    private String voc;
    private String translation;
    
    // Constructores
    public Vocab() {
        setVocab(Vocab.DEFAULT_VALUE);
        setTranslation(Vocab.DEFAULT_VALUE);
    }
    
    public Vocab(String voc, String transl) {
        setVocab(voc);
        setTranslation(transl);
    }
    
    @Override
    public String toString() {
        return (voc + " - " + translation);
    }
    
    // Getter
    public String getVoc() {
        return voc;
    }
    
    public String getTranslation() {
        return translation;
    }
    
    // Setter
    public final void setVocab(String voc) {
        if(voc == null) {
            throw new IllegalArgumentException("The Vocab can't be null");
        }
        this.voc = voc;
    }
    
    public final void setTranslation(String transl) {
        if(transl == null) {
            throw new IllegalArgumentException("The Translation can't be null");
        }
        this.translation = transl;
    }
    
    
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((voc == null) ? 0 : voc.hashCode());
        result = prime * result + ((translation == null) ? 0 : translation.hashCode());
        
        return result;
    }
    
    @Override
    public boolean equals(Object obj) {
        if(this == obj)
            return true;
        
        if(obj == null)
            return false;
        
        if(obj instanceof Vocab) {
            
            final Vocab otherVoc = (Vocab) obj;          
        
                if(voc.equals(otherVoc.getVoc())) {
                    if(translation.equals(otherVoc.getVoc())) {
                        return true;
                    }
                }
        }
        return false;
    }   
}
```

Was ist daran falsch ?
Wahrscheinlich ist das so ein ganz dummer Fehler, den ich nicht erkenne oder ?

//Edit:
Habe ganz vergessen zu schreiben, wie ich das ganze in ein XML-File schreibe:
Dazu benutze ich java.bean.XMLEncoder/XMLDecoder
Also:

```
XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("PATH")));
encoder.writeObject($(OBJECT));
encoder.close();
```

Tim


----------



## musiKk (22. Jun 2012)

Für die Serialisierung werden offenbar Getter/Setter-Paare verwendet. Bei [c]translation[/c] stimmt das auch, aber bei [c]voc[/c] hast Du [c]getVoc()[/c] und [c]setVocab()[/c]. Wird die eine Methode entsprechend der anderen angepasst, funktioniert es.


----------



## LusH (23. Jun 2012)

Danke für den Tipp :toll:
Hat geklappt 

Was ein blöder Fehler ... 


```
System.out.println("Danke :)");
```


----------

