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étitif 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.