Nouvelle API de génération de XML
Le
Traroth

Bonjour,
Je viens de mettre en ligne une nouvelle petite API permettant de
générer du XML avec Java.
L'idée est de générer du XML en utilisant une pile. On empile chaque
niveau d'imbrication, et il suffit de dépiler pour redescendre d'un
niveau. L'objectif étant d'obtenir de meilleurs performances qu'avec
ce qui se fait actuellement, genre JDOM ou XStream. J'essayerais de
faire un petit benchmark, à l'occasion.
Ca s'appelle Xpresso, c'est sous LGPL et vous pouvez le trouver ici si
ça vous intéresse :
http://sourceforge.net/projects/xpresso/
Tout feedback m'intéresse, même mauvais
Je viens de mettre en ligne une nouvelle petite API permettant de
générer du XML avec Java.
L'idée est de générer du XML en utilisant une pile. On empile chaque
niveau d'imbrication, et il suffit de dépiler pour redescendre d'un
niveau. L'objectif étant d'obtenir de meilleurs performances qu'avec
ce qui se fait actuellement, genre JDOM ou XStream. J'essayerais de
faire un petit benchmark, à l'occasion.
Ca s'appelle Xpresso, c'est sous LGPL et vous pouvez le trouver ici si
ça vous intéresse :
http://sourceforge.net/projects/xpresso/
Tout feedback m'intéresse, même mauvais
Il n'est pas évident de savoir quel type d'usage est couvert.
Générer du xml mais à partir de quoi ?
JDOM permet de manipuler
XStream perment de faire du traitement en flux.
Donc xpresso ne semble pas 'concurrencer' cette API ou cette bibliothèque.
A la lecture de la javadoc (c'est la seule documentation disponible ?),
il est surprenant de gérer une pile sur le document mais pas sur un
élémént, comment gérer un arbre ?
D'autre part, je n'ai pas vu d'objet utilisant un outputstream ou un
write - je m'attendais à le voir dans "document" - comment produit-on le
document xml ?
Personnellement, j'ai d'abord créé un système analogue (mais dont la
propriété intellectuelle appartient à mon employeur) dans le cadre
d'un projet dans lequel un client Flex communique avec un serveur
Java. Comme la problématique de la montée en charge est très
importante, j'ai abandonné rapidement l'idée d'utiliser des web
services ou même BlazeDS.
Xpresso permet de générer du XML à partir d'une structure de donnée s,
comme une liste, par exemple. Mais il faut construire la logique
permettant de le générer soi-même. Avec JDOM aussi, au demeurant.
Le principe est simple : la pile stocke ta position en profondeur dans
l'arbre. Si tu dépiles et que tu empiles un autre élément, tu cré és
une branche parallèle à la première (celle que tu as dépilée).
Actuellement, oui, la Javadoc est la seule documentation. Je vais
toutefois écrire une présentation permettant d'introduire le
fonctionnement.
On peut récupérer le XML sous forme de String ou de Reader, en ce
moment. La version que je vais mettre en ligne dans les prochains
jours permet également de le récupérer sous forme de FileWriter (je
compte également changer le Reader en StringReader). Je prévois aussi
de créer une classe XpressoSource, qui implémentera
javax.xml.transform.Source.
l'envers.
Traroth
On Jan 6, 12:35 am, steph
0.7 version, 2010-01-11
Bug fixes/optimizations/refactoring:
-Element.label is now final.
-In the Document.unstack() method: the peekFirst()+removeFirst()
combination is replaced by pollFirst().
-Added a condition on open in the while loop in Document.finish()
(useful in the inherited
ConcurrentDocument class).
New features:
-A getStringReader() method is added to Document, returning the xml
text as a StringReader.
-Document now implements Cloneable. Document.clone() overrides
Object.clone().
and returns a deep copy of the Document, including deep copies of all
Element in the stack (see below).
-Element now implements Cloneable. Element.clone() overrides
Object.clone() and returns a deep copy of
the Element.
-Document now implements CharSequence and the length(), charAt(int),
subSequence(int,int) and toString() methods
are added.
-All classes now implement Serializable and contain a
serialVersionUID.
-Comment, Element, ProcessingInstruction, Comment and CDATA
constructors now protected. Instance are to be created
with methods from Document
-Added a thread-safe ConcurrentDocument class.
-Added a thread-safe ConcurrentElement class.
-Added a org.xpresso.xml.outputOutputter class, to output data in a
Writer ou an OutputStream.
Et maintenant, je vais essayer d'améliorer la qualité : passer aux
tests unitaires, documenter (y compris les packages), avant de
continuer d'ajouter des fonctionnalités. Avant que ça ne devienne trop
gros...
Traroth
On Jan 8, 11:01 am, Traroth