130 likes | 358 Views
Java XML. Tehnologii Java XML. Asigura persistenta datelor in diverse tipuri de aplicatii Tehnologii : JAXP: Java API for XML Procesing (SAX, DOM) JAXB: Java Architecture for XML Binding. XML.
E N D
Tehnologii Java XML • Asigurapersistenta datelor in diverse tipuri de aplicatii • Tehnologii: • JAXP: Java API for XML Procesing (SAX, DOM) • JAXB: Java Architecture for XML Binding
XML • XML este un standard pentrudescriereastructuriidocumentelorfolosind un limbaj de descriere • Caracteristici: • Format text pentrudescriereadatelorceeace-l face simplu de utilizatsiusoreditabil • Standardizat. Exista API-urispecializatepentruparsare • Applicatiile care utilizeaza XML trebuiesastabileascadoarparteasemantica a reprezentariidatelor
Elemente de structura XML Taguri – contin metainformatii legate de structura si semnatica datelor Sintaxa: <tag> continut </tag> sau <tag continut /> Atribute - sunt definite prin perechi nume-valoare in interiorul unui tag <point x=“72” y=“13” /> Un document XML incepe cu o declaratie: <?xml version="1.0" encoding="UTF-8" ?> Forma arborescenta: Contine un element radacina Contine alte elemente incuibate cuprinse intre 2 tag-uri pereche
JAXB JAXB (Java Architecture for XML Binding) oferă o modalitate de conversie între aplicaţii dezvoltate în limbajul de programare Java şi scheme XML. O aplicatie JAXB poate executa doua sarcini: - salvarea (marshalling) de obiecte Java in fisiere XML, cu posibilitatea de a crea si fisierele de structura XSD - construirea obiectelor Java din fisiere XML pe baza unei scheme XSD (unmarshalling) Pentru crearea/citirea schemelor se folosesc utilitarele schemagen si xjc
Citirea unei scheme prin xjc Sunt generate clasele Java pornind de la fisierul de descriere XSD. Etape: 1. Se copiaza fisierul XSD in folderul proiectului 2. Se lanseaza fereastra de commanda Command Prompt 3. Se executa comanda prin utilitarul xjc Exemplu. Destinatia fisierelor sursa va fi folderul src. Pachetul va fi model. xjc -d src -p model schema.xsd Crearea schemelor Prin utilitarul schemagen. Exemplu. Fisierele class sunt in folderol bin. Fisierele sursa sunt in folderul src\model. Clasa radacina este Personal descrisa in Personal.java. Numele implicit al schemei: schema1.xsd javac -d bin src\model\*.java schemagen -cp bin src\model\Personal.java
Serializarea campurilor/proprietatilor @XmlAccessorType - Este legata de serializarea campurilor/proprietatilor. Poate fi aplicat la nivel de pachet sau la nivel de clasa. Valori: @XmlAccessorType(XmlAccessType.FIELD); // Sunt serializate automat campurile nonstatice si netransient. Proprietatile numai prin prin efectul altei adnotari JAXB. @XmlAccessorType(XmlAccessType. PROPERTY); // Serializare automata a proprietatilor nonstatice si netransient. Campurile numai prin efectul altei adnotari JAXB. @XmlAccessorType(XmlAccessType. PUBLIC_MEMBER); // Serializare automata a campurilor/proprietatilor publice. Celelate numai prin efectul altei adnotari JAXB. Este tipul implicit @XmlAccessorType(XmlAccessType. NONE); // Serializare automata doar prin efectul altor adnotari JAXB.
Adnotari de structura @XmlRootElement; // defineşte elementul rădăcină din cadrul arborelui XML parametrii: public abstract String name; // Numele elementului Xml. In lipsa este luat numele clasei public abstract String namespace; // Numele de namespace Xml @XmlType(propOrder={"atr2","atr1",.. }); // permite stabilirea structurii documentului XML prin indicarea ordinii în care atributele clasei vor fi copiate @XmlElement; // Mapeaza o proprietate/camp la un element XML. Se aplica proprietatilor si/sau campurilor nonstatice si netranziente public abstract String name; //numele elementului XML. In lipsa: numele proprietatii/campului @XmlElementWrapper ;// Generează un element de acoperire (incuibare) în jurul unei reprezentari XML. Este utilizat în primul rând pentru evidentierea unei colecții. public abstract String name; //numele acoperirii. In lipsa: numele proprietatii/campului
JAXB Api Crearea unui obiect JAXBContext Un obiect JAXBContext constituie punctual de start intr-o aplcatie JAXB. Obiectul JAXBContext contine informatii de mapare XML-Java. public static JAXBContext newInstance(Class...classesToBeBound) throws JAXBException; // Este furnizata lista claselor recunoscute Salvarea schemei XML Salvarea schemei se poate face programmatic prin intermediul unui obiect SchemaOutputResolver. public abstract class SchemaOutputResolver extends Object; Metoda: public abstract Result createOutput(String namespaceUri, String suggestedFileName) throws IOException; // Decide locul in care va fi salvata schema XML si-l va intoarce sub forma unui obiect Result
public class StreamResult extends Object implements Result; // Clasa utilizata pentru generarea unor output-uri de tip XML, plain Text, HTML, sau alte forme de descriere text de tip markup. Constructori: public StreamResult(File f); public StreamResult(OutputStream outputStream); public StreamResult(Writer writer); Salvarea schemei se face prin metoda JAXBContext: public void generateSchema(SchemaOutputResolver outputResolver) throws IOException;
Exemplu Marshaller msh = jaxbC.createMarshaller(); SchemaOutputResolver resolver = new SchemaOutputResolver() { public Result createOutput(String namespaceUri, String suggestedFileName) throws IOException { return createResult("schema.xsd"); } }; jaxbC.generateSchema(resolver); } ... public Result createResult(String suggestedFileName) throws IOException { File file = new File(suggestedFileName); StreamResult result = new StreamResult(file); result.setOutputStream(new FileOutputStream(file)); return result; }
Salvarea obiectelor in XML (marshalling) Un obiect Marshaller salveaza continutul arborelui de obiecte intr-un fisier XML. Obiectul Marshaller se obtine din JAXBContext: public abstract Marshaller createMarshaller() throws JAXBException; Serializarea arborelui in XML se face prin metoda: void marshal(Object jaxbElement, File output) throws JAXBException; Proprietati marshalling: void setProperty(String name, Object value) throws PropertyException; // Pot fi stabilite anumite proprietati de care sa se tina seama la salvare Exemplu: msh.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true/false); // Specifica daca se utilizeaza formatarea fisierului output (linii separate si indentare de linie). Valoarea implicita este false.
Citirea fisierelor XML (unmarshalling) Consta in deserializarea si constituirea arborelui de obiecte Java. Sunt folosite obiecte Unmarshaller create prin JAXBContext: public abstract Unmarshaller createUnmarshaller() throws JAXBException; Citirea: Object unmarshal(File f) throws JAXBException;