XMLEncoder nie zapisuje wszystkich danych

0

Kod wziąłem z oficjalnej strony:
http://docs.oracle.com/javase/7/docs/api/java/beans/XMLEncoder.html

public class Klasa {
  public static void main(String[] args){

	  XMLEncoder e = null;
          
          try {
		e = new XMLEncoder(
		          new BufferedOutputStream(
		              new FileOutputStream("Test.xml")));
	    } catch (FileNotFoundException e1) {
		e1.printStackTrace();
	    }
        
            e.writeObject(new JButton("Hello, world"));
            e.close();		  
  } 
}

Po uruchomieniu otrzymuję tylko:

  <java version="1.7.0_01" class="java.beans.XMLDecoder">
  <object class="javax.swing.JButton">
   <string>Hello, world</string>
 </object>
</java>

Żadnych szczegółowych informacji, tylko nazwa klasy i argument konstruktora.
Próbowałem z własną klasą, ale problem się powtórzył.
Co zrobić, żeby zapisać całą klasę, a nie tylko jej nazwę?

0

Żeby encoder działał musisz serializować klasę która spełnia kontrakt JavaBean (ma bezparametrowy kontruktor i ma setery/getery do wszystkich pól)

0

No i wszystko masz dobrze, ten encoder tak działa. Polega to na tym, że zapisuje on tylko zmiany obiektu od stanu, jaki ma po utworzeniu go konstruktorem bezparametrowym. Przy odtwarzaniu dekoderem tworzony jest obiekt klasy odczytany z pliku, a następnie wywoływane są settery dla pól, których wartości zapisały się w XML. Jak zmienisz w buttonie więcej rzeczy, to ci się więcej do pliku zapisze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1