pr sentation jaxb et struts n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Présentation JAXB et STRUTS² PowerPoint Presentation
Download Presentation
Présentation JAXB et STRUTS²

play fullscreen
1 / 35

Présentation JAXB et STRUTS²

136 Views Download Presentation
Download Presentation

Présentation JAXB et STRUTS²

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Présentation JAXB et STRUTS² Combe Pierre Coin Cyrille Jehanno Mathieu

  2. Sommaire • Présentation de JAXB • Présentation de STRUTS² • Présentation de l’étude de cas • Conclusion Cyrille Coin, Pierre Combe, Mathieu Jehanno

  3. JAXB Java Architecture for XML Binding Cyrille Coin, Pierre Combe, Mathieu Jehanno

  4. Présentation • API Java de Sun • Gestion de la persistance en XML • Framework utilisant le Data Binding Cyrille Coin, Pierre Combe, Mathieu Jehanno

  5. Data Binding (association de données) • Le Data Binding est une technologie permettant d'automatiser la transformation d'un modèle de données en un modèle de données objets dans un langage de programmation • JAXB permet de convertir les fichiers XML en instances de classes Java Cyrille Coin, Pierre Combe, Mathieu Jehanno

  6. Présentation (2) • L'utilisation de JAXB implique trois étapes : • La génération de classes à partir du schéma XML • Le rassemblement des données • La redistribution des données Cyrille Coin, Pierre Combe, Mathieu Jehanno

  7. Principe Cyrille Coin, Pierre Combe, Mathieu Jehanno

  8. Principe (2) Cyrille Coin, Pierre Combe, Mathieu Jehanno

  9. Génération des classes Java (1) • Réalisée à l’aide d’un schéma XSD • Utilisation du Compilateur JAXB XJC xjc [-options …] <schema> • Liste des options sur le site de SUN : https://java.sun.com/webservices/docs/2.0/tutorial/doc/JAXBUsing2.html#wp150369 Cyrille Coin, Pierre Combe, Mathieu Jehanno

  10. Génération de classes Java – Exemple (1) • contact.xml • contact.xsd <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Contacts> <Contact mail="pico07@hotmail.fr" prenom="Pierre" nom="Combe"/> <Contact mail= " mj@eisti.fr" numTel= " 068984356" prenom="Mathieu" nom="Jehanno"/> </Contacts> • <xsd:elementname="Contacts" type="ListeContacts"/> • <xsd:complexTypename="ListeContacts"> • <xsd:sequence> • <xsd:element name="Contact" type="ContactType" maxOccurs="unbounded"/> • </xsd:sequence> • </xsd:complexType> • <xsd:complexTypename="ContactType"> • <xsd:attribute name="nom" type="xsd:string"/> • <xsd:attribute name="prenom" type="xsd:string"/> • <xsd:attribute name="numTel" type="xsd:int"/> • <xsd:attribute name="mail" type="xsd:string"/> • </xsd:complexType> Cyrille Coin, Pierre Combe, Mathieu Jehanno

  11. Génération de classes Java - Exemple (2) Pour cette étude de cas, le compilateur XJC génère 3 classes Java : Cyrille Coin, Pierre Combe, Mathieu Jehanno

  12. La classe ObjectFactory • Cet objet contient l’ensemble des méthodes de construction des objets Java générés par XJC dans le package • ObjectFactory permet d’instancier les objets Java représentant « le contenu XML » • public ContactTypecreateContactType() • public ListeContactscreateListeContacts() • public JAXBElement<ListeContacts> createContacts(ListeContacts value) • JAXBElement est un objet du type complexe qui encapsule la racine du document XML Cyrille Coin, Pierre Combe, Mathieu Jehanno

  13. Le Plugin XJC Eclipse (1) • Facilite l’utilisation du compilateur XJC • Installation • Site web : https://jaxb-workshop.dev.java.net/plugins/eclipse/xjc-plugin.html • Copier le répertoire dans le répertoire plugins d’Eclipse • Redémarrer Eclipse Cyrille Coin, Pierre Combe, Mathieu Jehanno

  14. Plugin XJC Eclipse (2) Cyrille Coin, Pierre Combe, Mathieu Jehanno

  15. Le rassemblement des données • Le rassemblement des données (unmarshall en anglais) permet d'instancier les classes précédemment créées avec les données contenues dans les fichiers XML • XML => JAVA • Pour cela, il faut utiliser un rassembleur (unmarshaller). Ce dernier va vérifier que les données qu'il reçoit sont bien celles attendues (sinon exceptions levées) Cyrille Coin, Pierre Combe, Mathieu Jehanno

  16. Le rassemblement des données (2) • Package javax.xml.bind.* • La création des objets nécessite la création d'un objet de type JAXBContexten utilisant la méthode statique newInstance() • L’objet Unmarshaller va permettre de transformer un document XML en un ensemble d'objets. Une telle instance est obtenue en utilisant la méthode createUnmarshaller() de la classe JAXBContext • La méthode unmarshal() de la classe Unmarshaller se charge de traiter un document XML et retourne un objet du type complexe qui encapsule la racine du document XML Cyrille Coin, Pierre Combe, Mathieu Jehanno

  17. Le rassemblement des données (3) public voidload(String filename) { try { // Création d'une instance des classes générées à partir du schéma JAXBContextjc = JAXBContext.newInstance(‘schema.repertoire’); // Création d'un objet Unmarshaller Unmarshaller u = jc.createUnmarshaller(); // Demander la validation du document unmarshaller.setValidating(true);   // Chargement de l'arbre à partir du xml "filename" JAXBElement<ListeContacts> contacts = (JAXBElement<ListeContacts>) u.unmarshal(new FileInputStream(filename)); ListeContactsrepertoire = contacts.getValue(); } catch (JAXBException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } } Cyrille Coin, Pierre Combe, Mathieu Jehanno

  18. La redistribution des données • Elle consiste à récupérer le contenu de chaque instance de classe et de les insérer dans les fichiers XML • JAVA => XML • Comme pour le rassemblement, pour la redistribution, nous disposons d'un distributeur (marshaller). Ce dernier est chargé de vérifier l'intégrité des données qu'il transporte. Si une erreur intervient, il pourra lever des exceptions Cyrille Coin, Pierre Combe, Mathieu Jehanno

  19. La redistribution des données (2) • Package javax.xml.bind.* • La création du document nécessite la création d'un objet de type JAXBContext en utilisant la méthode statique newInstance() • Il faut ensuite créer un objet de type Marshaller à partir du contexte et d'appeler sa méthode marshall pour générer le document. Cyrille Coin, Pierre Combe, Mathieu Jehanno

  20. La redistribution des données (3) public voidsave(String filename) { try { PrintStream out = new PrintStream(filename); JAXBElement<ListeContacts> contacts_list = of.createContacts(repertoire); JAXBContextjc = JAXBContext.newInstance(‘schema.repertoire’); Marshaller m = jc.createMarshaller(); // Pour une indentation plus "lisible" du fichier XML m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); m.marshal(contacts_list, out); } catch (JAXBExceptionjbe) { System.err.println("Erreur lors de la redistribution des données"); jbe.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } } Cyrille Coin, Pierre Combe, Mathieu Jehanno

  21. JAXB Annotations • package javax.xml.bind.annotation • @XmlAttribut • @XmlElement • L'annotation @XmlRootElement peut être utilisée sur une classe pour préciser que cette classe sera le tag racine du document XML Cyrille Coin, Pierre Combe, Mathieu Jehanno

  22. JAXB Annotations (2) • Il est possible de configurer l'ordre des éléments @XmlRootElement @XmlType(propOrder = {"nom", "prenom", "taille",  "dateNaiss", "adresses"})   public class Personne {     private String nom;     private String prenom; ... Cyrille Coin, Pierre Combe, Mathieu Jehanno

  23. STRUTS² Cyrille Coin, Pierre Combe, Mathieu Jehanno

  24. Présentation STRUTS² Cyrille Coin, Pierre Combe, Mathieu Jehanno

  25. Comment utiliser STRUTS² • Télécharger Struts2 à l’adresse suivante et dézipper le: • http://struts.apache.org/download.cgi • Un fichier nommé struts2-blank-2.x.x.warest présent dans le dossier dézippé. • Télécharger Tomcat à l’adresse suivante et installer le: • http://tomcat.apache.org/download-55.cgi • Démarrer Eclipse, puis File/import/WAR file Cyrille Coin, Pierre Combe, Mathieu Jehanno

  26. Comment utiliser STRUTS² • Voici ici un projet Struts2 nommé présentation. • Vous pouvez démarrer HelloWorld.jsp et vous apprécierez Struts2!!! Cyrille Coin, Pierre Combe, Mathieu Jehanno

  27. Fonctionnement de Struts²Exemple avec un formulaire • Formulaire Struts² • En Entête de la jsp: • <%@ taglibprefix="s" uri="/struts-tags" %> • Formulaire de Login • Mémoriser le nom de l’action ainsi que <s:actionerror /> Cyrille Coin, Pierre Combe, Mathieu Jehanno

  28. Fonctionnement de Struts² • Un fichier struts.xml a été crée lors de l’import. • Afin d’intercepter l’action de demande de login, nous rajoutons une action dont le nom est doLogin, dont le contrôleur est dans le package net.roseindia.Login. Enfin, dans les balises « result », on traite les différents cas possibles. Cyrille Coin, Pierre Combe, Mathieu Jehanno

  29. Fonctionnement de Struts² • On crée un contrôleur Login.java dans le package net.roseindia, classe qui « extends » ActionSupport. • On doit créer deux attributs, username et password, ainsi que les getters et setters. (Attention, les attributs doivent avoir le même nom que dans le formulaire de la jsp) Cyrille Coin, Pierre Combe, Mathieu Jehanno

  30. Fonctionnement de Struts² • Lors de l’appel d’un getter, Struts2 fait le lien entre le nom des textfield et les méthodes getXXX(). (le textfield nommé username sera récupéré par getUsername() • La fonction execute() est appelée automatiquement. Dans cette fonction et à l’aide des méthodes getUsername() et getPassword(), on contrôlera la bonne saisie des données. Cyrille Coin, Pierre Combe, Mathieu Jehanno

  31. Fonctionnement de Struts² • Valeur de retour • Si le couple login/mot de passe est correct, alors on retourne SUCCESS. • Sinon, on crée un addActionError("Invalid user name or password! Please try again!"); et on retourne ERROR. • Dans la jsp, nous avonsparlé d’un <s:actionerror />, c’est à cetendroitqu’apparaitra le message d’erreurdans la jsp. Cyrille Coin, Pierre Combe, Mathieu Jehanno

  32. Gestion des erreurs de saisie – méthode 1 • Via un XML • Créer un XML ayant comme nom : • NomDeLaClasse-validation.xml • Dans notre exemple, le XML sera Login-validation.xml • Voici le contenu: • Username et password sont requis Cyrille Coin, Pierre Combe, Mathieu Jehanno

  33. Gestion des erreurs de saisie – méthode 2 • Via un validator dans la classe • Importer dans la classe Login: import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator; • Puis rajouter @RequiredStringvalidator juste au dessus de getter dont la saisie est obligatoire puis le message à afficher si l’utilisateur ne saisit pas le champ. • Le message apparaitra dans la jsp à l’endroit de la balise: • <s:actionmessage/> Cyrille Coin, Pierre Combe, Mathieu Jehanno

  34. Gestion des erreurs de saisie – méthode 3 • Via le contrôleur, dans la fonction execute() • if(getUsername().equals("") || getPassword().equals("")){ • addActionError("Données manquantes "); • return ERROR; • } Cyrille Coin, Pierre Combe, Mathieu Jehanno

  35. Présentation de l’application Cyrille Coin, Pierre Combe, Mathieu Jehanno