Title: Serializace enum do xml v Jave 1.5

Zdravim,

mam jednoduchy objekt obsahujici String a enum. Objekt se pokousim ulozit a znovu vytvorit.

Pokud ukladam pomoci ObjectOutputStream, probehne vse ok. Pokud vsak pouziji XMLEncoder, pri zapisu objektu se vypisi chyby:

java.lang.InstantiationException: SEnum

java.lang.RuntimeException: failed to evaluate: <unbound>=Class.new();

a objekt se zapise bez enumu.

public enum SEnum{

  Zero, One, Two;

}

public class S implements Serializable{

  public S () {}

  private String name;

  private SeriEnum e;

 

  public String getName(){

    return name;

  }

  public void setName(String val){

    name=val;

  }

 

  public SeriEnum getE() {

    return e;

  }

  public void setE(SeriEnum Ty) {

    this.e = Ty;

  }

}

  public static void main(String[] args) {

    S so=new S();

    so.setName("beruska");

    so.setE(SEnum.Two);

    String fileName="zk.xml";

    //zapis

    FileOutputStream os=new FileOutputStream(fileName);

    BufferedOutputStream bos=new BufferedOutputStream(os);

    XMLEncoder en=new XMLEncoder(bos);

    en.writeObject(so);

    en.flush();

    en.close();

    //obnoveni

    FileInputStream fis=new FileInputStream(fileName);

    BufferedInputStream bis=new BufferedInputStream(is);

    XMLDecoder de=new XMLDecoder(bis);

    Object do=de.readObject();

    de.close();

}

Nevim, jestli JavaBean nemuze z principu mit vlastnost typu enum (resp. enum neni JavaBean), jestli (a jak?) pro tvorbu enumu pouzit (Class Enum<...>). Dokazal jsem problem pouze obejit tim, ze jsem v tride S vytvoril jeste jednu String promennou, ktera obsahuje enum jako retezec a v jejim setru se mj. enum vytvari:

private String es;

  public String getE(){

    return es;

  }

  public void setE(String val){

    e=SEnum.valueOf(val);

    es=val;

}

Je to sice fungujici, ale nevedel by nekdo, jak ukladat enum primo?

Dekuji

Kamil Horný

Odpovedet emailem