> Vytvaram spravne instanciu Config() pomocou operatora new?

Ano, tak je to v java zvykem.

Ale s JAXB to nema vubec nic spolecneho.
 
> Pohladom do kodu vidim, ze vygenerovane classy neobsahuju ziaden kod,
> len
> deklaracie a kopu @XmlElement, takze imho by som mal pouzit jaxb, ale
> neviem
> ako.

To je v poradku, ty anotace jsou pouzity az pri vlastnim nacitani/ukladani XML 
dokumentu.

> > Problem je, ze v nasledovnom kode:
> >
> > Config c = new Config();
> > c.getTst().setA("a");
> >
> > dostavam null exception, pretoze getTst() vrati null.

Asi jste si to v konstruktoru Config() nezaridil, aby metoda getTst() inicialne 
nevracela null.

Chtel jste si nejakou javovskou instanci zapsat do XML?
Pak si ji musite nejak spravne vytvorit.

Config c = new Config();

je spravny, avsak asi prilis maly krok.

Dale pripojuji prvni pomoc pro praci s JAXB:

> Zápis do XML provedeme takto (řekněme, že v "data" máme 
> instanci "Struktura"):
> 
> JAXBContext context = JAXBContext.newInstance(Struktura.class);
> context.createMarshaller().marshal(data, System.out);
> 
> Zapíše se komplet celá struktura i s vnořenými třídami.
> Komu by se nelíbilo XML na jednom řádku, může si výstup vylepšit:
> 
> JAXBContext context = JAXBContext.newInstance(Struktura.class);
> Marshaller marshaller = context.createMarshaller();
> marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, 
> true);         
> marshaller.marshal(data, System.out);
>


> Načtení z XML je rovněž velmi velmi jednoduché:
> 
> JAXBContext context = JAXBContext.newInstance(Struktura.class);
> Struktura data = 
> (Struktura)context.createUnmarshaller().unmarshal(new 
> FileInputStream("test.xml"));
> 
> Takto ale načteme bez kontroly, že XML odpovídá danému schématu (XSD).
> 
> Co je však paráda, tak že XSD zvládneme vygenerovat i z daného POJO:
> 
> JAXBContext context = JAXBContext.newInstance(Struktura.class);
> final List<DOMResult> results = new ArrayList<DOMResult>();
>    context.generateSchema(
>      new SchemaOutputResolver() {
>        @Override
>        public Result createOutput(String ns, String file) throws 
> IOException {
>           DOMResult result = new DOMResult();
>           result.setSystemId(file);
>           results.add(result);
>           return result;
>         }
> });
>       
> DOMResult domResult = results.get(0);
> Document doc = (Document) domResult.getNode();
> OutputFormat format = new OutputFormat(doc);
> format.setIndenting(true);
> XMLSerializer serializer = new XMLSerializer(new 
> FileOutputStream("test.xsd"), format);
> serializer.serialize(doc);
> 
> A dané XSD pak můžeme při načítání použít třeba takto:
> 
> JAXBContext context = JAXBContext.newInstance(Struktura.class);
> Unmarshaller unmarshaller = context.createUnmarshaller();
> SchemaFactory schemaFactory = 
> SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema";);
> Schema schema = schemaFactory.newSchema(new File("test.xsd"));
> unmarshaller.setSchema(schema);
> Struktura data = 
> (Struktura)context.createUnmarshaller().unmarshal(new 
> FileInputStream("test.xml"));

Snad Vam to pomuze.
M.

Odpovedet emailem