> 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.