Téléchargement de la présentation des 2 - gardeux

publicité
Combe Pierre
Coin Cyrille
Jehanno Mathieu

Présentation de JAXB

Présentation de STRUTS²

Présentation de l’étude de cas

Conclusion
Cyrille Coin, Pierre Combe,
Mathieu Jehanno
Java Architecture for XML Binding
Cyrille Coin, Pierre Combe, Mathieu Jehanno

API Java de Sun

Gestion de la persistance en XML

Framework utilisant le Data Binding
Cyrille Coin, Pierre Combe, Mathieu Jehanno


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

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
Cyrille Coin, Pierre Combe, Mathieu Jehanno
Cyrille Coin, Pierre Combe, Mathieu Jehanno



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/tutori
al/doc/JAXBUsing2.html#wp150369
Cyrille Coin, Pierre Combe, Mathieu Jehanno

contact.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Contacts>
<Contact mail="[email protected]" prenom="Pierre" nom="Combe"/>
<Contact mail= " [email protected]" numTel= " 068984356" prenom="Mathieu" nom="Jehanno"/>
</Contacts>

contact.xsd
<xsd:element name="Contacts" type="ListeContacts"/>
<xsd:complexType name="ListeContacts">
<xsd:sequence>
<xsd:element name="Contact" type="ContactType" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="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
Pour cette étude de cas, le compilateur XJC génère 3 classes Java :
XML Schéma
<xsd:complexType name="ListeContacts">
<xsd:sequence>
<xsd:element name="Contact" type="ContactType"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="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>
-
JAXB Binding
(package schema.repertoire)
ListeContacts.java
protected List<ContactType> contact;
public List<ContactType> getContact()
ContactType.java
Contient les 4 attributs + getters et
setters
ObjectFactory.java
Cyrille Coin, Pierre Combe, Mathieu Jehanno


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 ContactType createContactType()
◦ public ListeContacts createListeContacts()
◦ 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

Facilite l’utilisation du compilateur XJC

Installation
◦ Site web : https://jaxbworkshop.dev.java.net/plugins/eclipse/xjcplugin.html
◦ Copier le répertoire dans le répertoire plugins
d’Eclipse
◦ Redémarrer Eclipse
Cyrille Coin, Pierre Combe, Mathieu Jehanno
Cyrille Coin, Pierre Combe,
Mathieu Jehanno



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




Package javax.xml.bind.*
La création des objets nécessite la création d'un objet de
type JAXBContext en 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
public void load(String filename) {
try {
// Création d'une instance des classes générées à partir du schéma
JAXBContext jc = 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));
ListeContacts repertoire = contacts.getValue();
}
} catch (JAXBException e) { e.printStackTrace(); }
catch (FileNotFoundException e) { e.printStackTrace(); }
Cyrille Coin, Pierre Combe, Mathieu Jehanno



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



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
public void save(String filename) {
try {
PrintStream out = new PrintStream(filename);
JAXBElement<ListeContacts> contacts_list = of.createContacts(repertoire);
JAXBContext jc = 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 (JAXBException jbe) {
System.err.println("Erreur lors de la redistribution des données");
jbe.printStackTrace();
} catch (FileNotFoundException e) { e.printStackTrace(); }
Cyrille Coin, Pierre Combe, Mathieu Jehanno




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

Il est possible de configurer l'ordre des éléments
@XmlRootElement
@XmlType(propOrder = {"nom", "prenom", "taille", "dateNaiss", "a
dresses"})
public class Personne {
private String nom;
private String prenom;
...
Cyrille Coin, Pierre Combe, Mathieu Jehanno
Cyrille Coin, Pierre Combe, Mathieu Jehanno
Cyrille Coin, Pierre Combe, Mathieu Jehanno

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.war est 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


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

Formulaire Struts²
◦ En Entête de la jsp:
 <%@ taglib prefix="s" uri="/struts-tags" %>
◦ Formulaire de Login
◦ Mémoriser le nom de l’action ainsi que <s:actionerror />
Cyrille Coin, Pierre Combe, Mathieu Jehanno


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


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


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

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 avons parlé d’un <s:actionerror />,
c’est à cet endroit qu’apparaitra le message d’erreur
dans la jsp.
Cyrille Coin, Pierre Combe, Mathieu Jehanno

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

Via un validator dans la classe
◦ Importer dans la classe Login: import
com.opensymphony.xwork2.validator.annotations.Requir
edStringValidator;
◦ 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

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
Cyrille Coin, Pierre Combe, Mathieu Jehanno
Téléchargement