11. seminář - Reflexe

TEACHINGJJ2

Materiály k semináři

Úkoly

Navrhněte anotace, které vám usnadní serializaci a deserializaci jednoduchých objektů do formátu XML. Předpokládejte, že objekty mají bezparametrický konstruktor a pomocí parametru anotace je určený element XML dokumentu pro danou hodnotu.

Metody třídy by mělo být možné označit následovně:


    @Serialize(as = "emp")
    @Deserialize(as = "emp")
    class Employee {
        
        private String name;
        private int age;
        private double salary;
    
        public Employee() { }
    
        @Deserialize(as = "name")
        public void setName(String name) {
            this.name = name;
        }
    
        @Serialize(as = "name")
        public String getName() {
            return this.name;
        }
    
        @Deserialize(as = "age")
        public void setAge(int age) {
            this.age = age;
        }
    
        @Serialize(as = "age")
        public int getAge() {
            return this.age;
        }
    
        @Deserialize(as = "income")
        public void setSalary(int salary) {
            this.salary = salary;
        }
    
        @Serialize(as = "income")
        public int getSalary() {
            return this.salary;
        }
    }

Implementujte třídu Serializer mající metodu void serialize(Object obj), která využije anotací a vygeneruje XML soubor ve tvaru:


    <emp>
      <name>Tomas Marny</name>
      <income>58000</income>
      <age>42</age>
    </emp>

Implementujte třídu Deserializer mající metodu Object deserialize(), která z XML souboru vytvoří daný objekt.

Třídy Serializer a Deserializer by měly být obecné, tj. musí ukládat nebo načítat libovolné objekty vybavené příslušnými anotacemi. Seznam tříd, se kterými třída Deserializer bude umět pracovat, by jí měl být předán v konstruktoru.

Můžete použít libovolnou knihovnu pro práci s XML.

Vyřešené úkoly zašlete do 17.5.2022 17:00 CET na email roman.vyjidacek@upol.cz s předmětem: JJ2_11. Zasílejte pouze zdrojové kódy. Pokud chcete zdrojové kódy poslat zkomprimované, použijte formát zip..