VI. Very Simple XML▲
VI-A. Définition par l'exemple▲
Le code xml suivant permet de créer un nouvel utilisateur :
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:user='http://user.com' xmlns:datas='http://www.exemple.com/datas'>
Posting new User
<user:firstname>Penny</user:firstname>
<user:lastname lastname="Money"/>
<datas:email where="JustAfter"/>
moneypenny@mi5.co.uk
</root>Il y a quand même plus de chances que la requête envoie :
<root>
<firstname>Penny</firstname>
<lastname>Money</lastname>
<email>moneypenny@mi5.co.uk</email>
</root>Le dernier exemple est appelé VerySimpleXml et 95% de vos requêtes seront similaires. Robusta fournit des outils pour créer et lire très efficacement ces "documents".
VI-B. SAX ou JDOM ?▲
Robusta propose une implémentation avec Sax (VsxSax), et une implémentation avec Jdom (VsxJdom). Sax est fourni dans la majorité des JVM, alors qu'il vous faudra télécharger Jdom et le mettre dans le ClassPath. Par contre VsxJdom fournit des méthodes supplémentaires pour obtenir un objet de type org.jdom.Document.
Chaque appel à VsxSax nécessite également de parser à nouveau le document. Il n'y a pas encore de Benchmarks, mais il semble logique que VsxJdom sera plus compétitifs si vous faites plusieurs travaux sur le même document. Mais ce sera toujours dérisoire face aux autres travaux du serveur.
VI-C. L'interface VerySimpleXml▲
Voici quelques méthodes parmi les plus utiles.
public String getValue(String xml, String nodeName) throws XmlException;
public Long getSimpleNumber(String xml, String nodeName) throws XmlException;
public String getPossibleValue(String xml, String nodeName) throws XmlException;
public String buildVerySimpleXml(Object ... elements) throws XmlException;VI-D. Quelques exemples▲
Voici un exemple avec Jdom, analysant une requête pour enregistrer un utilisateur.
@POST
public Response registerUser(String content) {
VsxJdom vsx=new VsxJdom();
try {
org.jdom.Document doc = vsx.getDocument(content);
String email = vsx.getPossibleValue(doc, "email");
String passwordMD5 =vsx.getPossibleValue(doc, "passwordMD5")
if (!StringUtilities.validateEmail(email) || !StringUtilities.validateMD5(passwordMD5)) {
throw new IllegalArgumentException("email or password is not valid");
}
//other code
} catch (Exception ex) {
return classicFailure(ex);
}
}Nous avions déjà vu l'utilisation de buildVerySimpleXml()
String xml = new VsxSax().buildVerySimpleXml("idUser", user.getId(),
"username", user.getUsername(), "email", user.getEmail(), "lazyToken",lazyToken );produira :
<root>
<idUser>254</idUser>
<username>jamesbond</username>
<email>jamesbond@mi5.co.uk</email>
<lazyToken>abcdefghi==</lazyToken>
</root>
Enfin un exemple avec du XML un peu plus complexe, mais avec toujours une structure simple. La méthode getCouples est très utile
pour analyser une liste de Resources.
Soit la variable String xml =
<root>
<object><data>Jambalaya</data><beans>75</beans></object>
<object><data>Cassoulet</data><beans>150</beans></object>
<object><data>Garbure</data><beans>15</beans></object>
</root>L'appel getCouples(xml, "data", "beans") renverra le CoupleList [("Jambalaya", "75"), ("Cassoulet", "150"), ("Garbure", "15")].
VI-E. Conclusion▲
VerySimpleXml peut être utilisé dans tout type de projet Java utilisant des structures XML simples. C'est pourquoi Robusta n'est pas un framework mais une bibliothèque qui peut accompagner tout type de projets.


