Génie XML - Yves Bekkers1 DOM4J. Génie XML - Yves Bekkers2 Diagramme des classes.

Slides:



Advertisements
Présentations similaires
Projets M1 XML, Objets. Université Paris II & LRI Michel de Rougemont 1.Projets 2.XML 3.Programmation objet 4.D.O.M.
Advertisements

Transformation de documents XML
Spécialisation/généralisation Héritage Polymorphisme.
Sérialisation des objets
Introspection et Réflexion Manipulation dynamique de code Java.
Au programme du jour …. Ce que vous navez pas encore vu Constantes et variables de classe Main et Tests Utilisation de lAPI Existence des packages Existence.
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Programmation Web Les JSP.
Approfondissement du langage
R éé criture pour la programmation et la preuve Claude Kirchner Pierre-Etienne Moreau.
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
Les technologies XML Cours 3 : Les APIS XML Janvier Version 1.0 -
Programmer en JAVA par Tama
JAV - TD 6 Structures de données JAVA
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Présentation JAXB et STRUTS²
Programmation orientée objet
COURS DE PROGRAMMATION ORIENTEE OBJET :
UNIVERSITE CHOUAIB DOUKKALI Département des mathématiques
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
Présentation Struts1-JaxB
Principes de programmation (suite)
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Système d’Exploitation
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction au paradigme orienté-objet (suite)
Design Pattern: Decorator
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Java, les objets : tout de suite ! Rassembler, grouper les objets
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
1212 Entrée et sortie de fichiers Objectifs À la fin de ce cours, vous serez capables de : • Lire à partir de la console • Écrire sur la console.
J201 (JOC) Java Avancé juin 2007 ~ Brigitte Groléas ~
4 Introduction des objets. Les chaînes et tableaux
Découverte des Framework : SPRING & JAXB
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
11/04/ L'héritage Cours 7 Cours 7.
Cours Les flux ou streams. Cours 162 Flux : objet possédant des méthodes capables de lire ou écrire des flots d’octets sur tout support (mémoire,
Tutorat en bio-informatique
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Schéma de conception Factory Method Exemple Sylvain Giroux.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Héritage Conception par Objet et programmation Java
22 Concepts de base du langage Java. 2-2 Objectifs A la fin de ce cours, vous serez capables de : Identifier les éléments essentiels de Java Identifier.
BlueJ_VII 1 Java, les objets : tout de suite ! Conception de classes (1) Notes de cours associées au chapitre 7 tutorial BlueJ
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
Développement d’application avec base de données Semaine 3 : Modifications avec Entité Framework Automne 2015.
Sockets/rmi - Y. Bekkers1 Applications réparties en Java Paquetage java.net – Sockets Objets distants transparents – RMI Yves Bekkers.
Spécialisation covariante cours et TP. Plan  Introduction  Rappels théoriques  Définition de la covariance  Présentation du modèle servant d'exemple.
Développement d’application avec base de données Semaine 9 : Code First avec Entité Framework Automne 2015 Tous le matériel provient de :
UML : méthode Processus. Introduction(1) ● Cycles ● Spécification par cas d'utilisation ● Identifier les besoins ● Analyse par cas d'utilisation ● Affiner.
Introduction à la Programmation Orientée Objet H.GATI.
INDICO. Usage Centralisé au CC pour tout l’IN2P3 Remplace Agenda Maker (CDS agenda) Fermeture de Agenda Maker le 10 décembre (reste en mode consultation)
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Types paramètres bornés 4. Méthodes.
Principes de l'orienté objet Jean-Jacques LE COZ.
Génie XML - Yves Bekkers1 Programmation XML en Java Yves Bekkers.
Introduction à l'orienté objet. Définition Le terme orienté objet siginifie que l'on organise le logiciel comme une collection d'objets organisée en graphe.
Chapitre 5 Administration des accès aux objets dans les unités d'organisation Module S42.
Persistance des données O.Legrand. Persistance developer.android.com/guide/topics/data/data-storage.htmll Plusieurs moyens sur le mobile: –Système de.
Schéma de conception Factory Method Exemple
Transcription de la présentation:

Génie XML - Yves Bekkers1 DOM4J

Génie XML - Yves Bekkers2 Diagramme des classes

Génie XML - Yves Bekkers3 Compiler un document XML à partir d’un fichier Compilateur org.dom4j.io.SAXReader Code java.io.File myFile = new java.io.File("monFichier.xml"); org.dom4j.io.SAXReader reader = new SAXReader(); org.dom4j.Document document = reader.read(myFile);

Génie XML - Yves Bekkers4 Compiler un document XML a partir d’une chaîne Utiliser la méthode parseText() de la classe org.dom4j.DocumentHelper Code String s = " "; org.dom4j.Document document = DocumentHelper.parseText(s);

Génie XML - Yves Bekkers5 Ecrire un document DOM4J dans un fichier (présentation brute) Utiliser la mèthode write() de org.dom4j.Document Code java.io.FileWriter out = new java.io.FileWriter( new java.io.File("monfichier"); org.dom4j.Document doc =... doc.write( out ); out.close();

Génie XML - Yves Bekkers6 Ecrire un document DOM4J dans un fichier (avec indentation) Utiliser les formats org.dom4j.io.OutputFormat Code OutputFormat format = OutputFormat.createPrettyPrint(); writer = new XMLWriter(System.out,format); writer.write( document );

Génie XML - Yves Bekkers7 Ecrire un document DOM4J dans un fichier (présentation compacte) Utiliser les formats org.dom4j.io.OutputFormat Code Document document =...; OutputFormat format = OutputFormat. createCompactFormat(); writer = new XMLWriter(System.out,format); writer.write( document );

Génie XML - Yves Bekkers8 Ecrire un document DOM4J dans un fichier (codage « ISO ») Utiliser les formats org.dom4j.io.OutputFormat Code Document document =...; OutputFormat format = OutputFormat. createCompactFormat(); format.setEncoding("ISO "); Writer fileWriter = new OutputStreamWriter( new FileOutputStream(new File(docFileName)), "ISO "); XMLWriter writer = new XMLWriter( new BufferedWriter(fileWriter), format); writer.write(DOC); writer.close();

Génie XML - Yves Bekkers9 Ecrire un document DOM4J dans une chaîne Utiliser la méthode asXML() de la classe org.dom4j.Node Code Document document =...; String text = document.asXML();

Génie XML - Yves Bekkers10 Créer un document DOM4J Utiliser la classe de création org.dom4j.DocumentHelper Code org.dom4j.Document document = DocumentHelper.createDocument(); org.dom4j.Element root = document.addElement( "root" );

Génie XML - Yves Bekkers11 Créer un élément DOM4J Utiliser la classe de création org.dom4j.DocumentHelper Code Element elem = DocumentHelper.createElement("test");

Génie XML - Yves Bekkers12 Ajouter des éléments Composer le résultat des méthodes addElement(), addAttribute(), addText() Code Element root =...; Element author1 = root.addElement( "author" ).addAttribute( "name", "James" ).addAttribute( "location", "UK" ).addText( "James Strachan" );

Génie XML - Yves Bekkers13 Naviguer avec XPath Utiliser les méthodes (classe Node ) selecNodes(), selecSingleNode() Code Document document =...; List list = document.selectNodes( "//foo/bar" ); Node node = document.selectSingleNode( "//foo/bar/author" );

Génie XML - Yves Bekkers14 Iterations Java Utiliser les iterations de Java java.util.List, java.util.Iterator Code Document document =...; List list = document.selectNodes( ); for (Iterator iter = list.iterator(); iter.hasNext(); ) { Attribute attribute = (Attribute) iter.next(); String url = attribute.getValue(); }

Génie XML - Yves Bekkers15 Iterations rapides (DOM4J) Utiliser les méthodes suivantes de la classe Node elem.nodeCount(), elem.node(i) Code public void treeWalk(Element element) { for (int i=0, size=element.nodeCount(); i<size; i++) { Node node = element.node(i); if ( node instanceof Element ) { treeWalk( (Element) node ); } else { // do something.... }

Génie XML - Yves Bekkers16 Transformer un document DOM4J (1) préparer la feuille de style Utiliser les classes (JAPX) javax.xml.transform.Transformer javax.xml.transform.TransformerFactory javax.xml.transform.stream.StreamSource Code File stylesheet = new File("style.xslt"); TransformerFactory factory = TransformerFactory.newInstance(); Transformer myTrans = factory.newTransformer( new StreamSource( stylesheet );

Génie XML - Yves Bekkers17 Transformer un document DOM4J (2) Transformer Utiliser les classes org.dom4j.io.DocumentSource org.dom4j.io.DocumentResult Code org.dom4j.io.DocumentSource source = new DocumentSource( document ); org.dom4j.io.DocumentResult result = new DocumentResult(); myTrans.transform( source, result );

Génie XML - Yves Bekkers18 Transformer un document DOM4J (3) Récupérer le résultat Utiliser la méthode getDocument() de la classe org.dom4j.io.DocumentResult Code Document transformedDoc = result.getDocument();

Génie XML - Yves Bekkers19 Transformer un document DOM4J en un document DOM import org.dom4j.io.DocumentSource; import javax.xml.transform.dom.DOMResult; public org.w3c.dom.Document getDOMDocument() { org.dom4j.Document doc; Transformer transformer = TransformerFactory.newInstance().newTransformer(); DocumentSource source = new DocumentSource(doc); DOMResult result = new DOMResult(); transformer.transform( source, result ); return (org.w3c.dom.Document) result.getNode(); }

Génie XML - Yves Bekkers20 Conclusion Dom4J DOM4J –basé sur l'utilisation d'interfaces –Implémente Xpath en natif permet d'explorer un document DOM4J directement Node nd = doc.selectSingleNode("//fo/bar/auteur"); Un article de comparaison par DOM4J – Un article de comparaison par IBM –ftp://www6.software.ibm.com/software/de veloper/library/x-injava.pdf

Génie XML - Yves Bekkers21 Castor

Génie XML - Yves Bekkers22 Castor à quoi cela sert ? Génération automatique de compilateur à partir –D’une classe modèle –D’un schéma

Génie XML - Yves Bekkers23 Une Classe JavaBean public class Personne implements java.io.Serializable { private String nom = null; private int age; public Personne() {super();} public Personne(String nom) {this.nom = nom;} public int getAge() {return age;} public String getNom() {return nom;} public void setAge(int age) {this.age = age;} public void setNom(String nom) {this.nom = nom;} }

Génie XML - Yves Bekkers24 JavaBean Propriétés 1.La classe est définie avec la protection public 2.Elle possède un constructeur par défaut (constructeur sans paramètre) 3.La classe implémente l'interface java.io.Serializable 4.Chaque attribut XXX de type TT est accédé exclusivement à l'aide de méthodes public TT getXXX() public void setXXX(TT val)

Génie XML - Yves Bekkers25 Sérialiser une Classe JavaBean Initialisation d'une personne Personne dutertre = new Personne("Du tertre"); dutertre.setAge(35); Sérialisation d'une personne FileWriter file = new FileWriter(nomFichier); Marshaller.marshal(dutertre, file); file.close(); Méthode static => sérialisation par défaut

Génie XML - Yves Bekkers26 Résultant de la sérialisation par défaut Du tertre

Génie XML - Yves Bekkers27 Sérialisation par défaut Castor utilise les facilités d'introspection dynamique des classes offertes par Java Sérialisation par défaut –Le nom d'élément est dérivé de celui de la classe –Les attributs de la classe et leur type sont découverts par introspection des méthodes getXXX et setXXX (dans le cas d'un JavaBean). –Les attributs de la classe donnent lieu à deux types de sérialisation selon le type Java de l'attribut Pour un type primitif on génère un attribut d'élément de même nom que l'attribut d'instance Pour un type non primitif ( String compris) on génère un sous- élément de même nom que l'attribut d'instance

Génie XML - Yves Bekkers28 Gérer les exceptions try { writer = new FileWriter(nomFichier); Marshaller.marshal(dutertre, writer); } catch (MarshalException e) { // TODO Bloc catch auto-généré e.printStackTrace(); } catch (ValidationException e) { // TODO Bloc catch auto-généré e.printStackTrace(); } catch (IOException e) { // TODO Bloc catch auto-généré e.printStackTrace(); }

Génie XML - Yves Bekkers29 Compiler un document XML en une instance de Classe JavaBean Compiler un document Personne.xml FileReader reader = new FileReader(nomFichier); Personne unePersonne = (Personne) Unmarshaller. unmarshal(Personne.class, reader); Nom de la classe Résultat Méthode static => traduction par défaut

Génie XML - Yves Bekkers30 Gérer les exceptions try { FileReader reader = new FileReader(nomFichier); Personne unePersonne = (Personne) Unmarshaller. unmarshal(Personne.class, reader); } catch (MarshalException e1) { e1.printStackTrace(); } catch (ValidationException e1) { e1.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); }

Génie XML - Yves Bekkers31 Modifier un bean unePersonne.setNom("?!xml#"); unePersonne.setAge(2000);

Génie XML - Yves Bekkers32 Modification du bean En entrée Du tertre En sortie ?!xml#

Génie XML - Yves Bekkers33 Provoquer une erreur de compilation En entrée Du tertre En sortie java.lang.NumberFormatException: deux at java.lang.Integer.parseInt(Integer.java:426 )

Génie XML - Yves Bekkers34 Castor accepte n'importe quelle classe Si la classe ne possède aucune méthode getXxx et setXxx Castor recherche les attributs public d'instance Si elle possède un seul accesseur get ou set les attributs d'instance sont ignorés

Génie XML - Yves Bekkers35 Choix d'un mode de traduction Traduction par défaut Du tertre Traduction désirée 35 Du tertre

Génie XML - Yves Bekkers36 Assister la traduction Lorsque la traduction par défaut ne convient pas, on peut spécifier sa propre traduction –Définir un fichier mapping.xml Programmation Objet Classes implémentant un arbre spécifique XML Arbres mapping.xml

Génie XML - Yves Bekkers37 Spécifier un mode de traduction Fichier mapping.xml un essai L'attribut age sera généré comme un élément XML

Génie XML - Yves Bekkers38 fichier mapping.xml en lecture // Creation du objet de traduction Mapping mapping = new Mapping(); mapping.loadMapping(mapFile); // Creation du lecteur FileReader reader = new FileReader(nomFichier); // Creation d'un compilateur Unmarshaller unmarshaller = new Unmarshaller(Personne.class); unmarshaller.setMapping(mapping); // Compilation unePersonne = (Personne) unmarshaller.unmarshal(reader); Configuration du compilateur

Génie XML - Yves Bekkers39 fichier mapping.xml en écriture // Creation de l’objet Personne laPersonne = …; Mapping mapping = new Mapping(); mapping.loadMapping(mapFile); // Creation du writer FileWriter writer = new FileWriter(nomFichier); // Creation d'un sérialisateur Marshaller marshaller = new Marshaller(writer); marshaller.setMapping(mapping); // sérialisation marshaller.marshal(laPersonne);

Génie XML - Yves Bekkers40 Collections d’éléments - 1 Collection d’éléments à la racine d’un document XML

Génie XML - Yves Bekkers41 Collections d’éléments - 2 Fichier de mapping

Génie XML - Yves Bekkers42 Lecture de la collections Utilisation d’un ArrayList mapping.loadMapping("mapping.xml"); FileReader in = new FileReader("items.xml"); Unmarshaller unmarshaller = new Unmarshaller(ArrayList.class); unmarshaller.setMapping(mapping); ArrayList orders = (ArrayList) unmarshaller.unmarshal(in); On obtient une ArrayList –org.exolab.castor.types.AnyNode Le nom de l’élément racine est indifférent !

Génie XML - Yves Bekkers43 Ecriture de la collection List orders = …; Mapping mapping = new Mapping(); mapping.loadMapping("mapping.xml"); PrintWriter writer = …; Marshaller marshall = new Marchaller(writer); marshall.setRootElement("orders"); marshall.setMapping(mapping); marshall.marshal(orders);

Génie XML - Yves Bekkers44 Traduction à partir d'un schéma de données

Génie XML - Yves Bekkers45 Castor source generator XMLschema Castor Source Generator Classes Java Marshall() Unmarshall () Document XML Instances d’objets Java Compilateur sérialisateur

Génie XML - Yves Bekkers46 Schéma XML Un schéma XML

Génie XML - Yves Bekkers47 Générer des classes java à partir d’un Schema XML Classe org.exolab.castor.builder.SourceGenerator SourceGenerator srcGen = new SourceGenerator(); srcGen.generateSource("Person.xsd","fr.ifsic.test"); 4 Classes générées pour un type d’élément

Génie XML - Yves Bekkers48 Classe abstraite générée pour le type complexe public abstract class A_type implements java.io.Serializable { private java.lang.String _b; private java.lang.String _c; public A_type() {super();} public java.lang.String getB() {return this._b;} public java.lang.String getC() {return this._c;} public void setB(java.lang.String b) {this._b = b;} public void setC(java.lang.String c) {this._c = c;} }

Génie XML - Yves Bekkers49 Classe générée pour l'élément public class A extends A_type implements java.io.Serializable { public A() { super(); } public void marshal(java.io.Writer out) {…} public void marshal(org.xml.sax.ContentHandler handler) {…} public static A unmarshal(java.io.Reader reader) {…} }

Génie XML - Yves Bekkers50 Classe de test public class TestABC { public static void main(String[] args) { if (args.length!=1) {…erreur…} A aaa = new A(); aaa.setB("bonjour"); aaa.setC("monsieur"); aaa.marshal(new OutputStreamWriter( new FileOutputStream(args[0]))); }

Génie XML - Yves Bekkers51 Document xml produit bonjour monsieur

Génie XML - Yves Bekkers52 Résumé des possibilités de Castor Castor offre quatre possibilités de traduction À partir d'une classe –Traduction par défaut –Traduction assistée par un fichier mapping.xml À partir d'un Schéma XML –Traduction par défaut –Traduction assistée par un fichier binding.xml Castor offre d'autres mécanismes –Génération d'EJBs, échange avec un SGBDR –échanges avec un annuaire LDAP …

Génie XML - Yves Bekkers53 D’autres convertions objets/XML XMLBeans – X-Stream – EMF+Teneo – teneo#teneo

Génie XML - Yves Bekkers54 Conclusion Génération de XML à partir d'un fichier texte non XML –Préférer DOM4J et Jdom à DOM si vous utilisez Java Génération de classe Java à partir d'un schéma de donnée (DTD ou Schéma XML) –Castor est un produit très abouti qui mérite le détour Lien avec sgbdr et j2EE –Castor semble être le bon candidat

Génie XML - Yves Bekkers55 Liens officiels DOM JDOM DOM4J Castor JAXB JaxMe