IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

[Xpresso] Nouvelle API de génération de XML


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité de passage

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Par défaut [Xpresso] Nouvelle API de génération de XML
    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...

  2. #2
    Membre chevronné Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2003
    Messages : 457
    Par défaut
    Bonjour,

    Je n'ai pas pu testé car ton code source n'est pas compatible avec java 1.5. Tu utilises les classe ArrayDeque et Deque (du package java.util) qui ne sont pas disponibles en 1.5 (ou alors il me manque quelque chose).

    Sinon tu ne fais pas de TU ?

    Et je n'ai pas compris comment tu arrives à un arbre à partir d'une pile.

    Voila et bon courage.

    Edit : Pourquoi les exceptions ne sont pas Runtime ?

  3. #3
    Invité de passage

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Par défaut
    Exact, j'utilise Deque, puisque c'est ce qui m'a semblé offrir les meilleurs performances. Comme beaucoup de gens se servent de Java 6 de nos jours, ça ne m'a semblé problématique. Visiblement si, donc il va au moins falloir que je le précise dans la présentation.
    L'ensemble du code fait dans les 600 lignes, donc je n'ai pas écrit de tests unitaires pour l'instant. Mais tu as raison, c'est mal (il faudrait les écrire avant le code, toussa...)

    Sinon, je n'ai pas généré la Javadoc pour l'instant. C'est idiot d'avoir mis en ligne sans ça, en fait. Peu de chances que grand monde s'en serve. Va falloir que je m'y mette ce soir.

    Comment on arrive à un arbre à partir d'une pile. C'est un algorithme de parcours d'arbre avec priorité à la profondeur, en fait :
    1 - Tu créés un document en spécifiant un élément racine, qui est empilé ou tu empiles un élément, qui devient donc ta profondeur courante dans l'arbre.
    2 - Tu y ajoutes du contenu (un élément supplémentaire et donc retour à l'étape 1, ou un bloc CDATA, un élément vide, un commentaire ou une processing instruction)
    3 -Tu dépiles un élément. S'il n'y a plus rien dans la pile, ton document est terminé, sinon, retour à l'étape 1 ou à l'étape 2

    Si tu veux voir un exemple de fonctionnement, il doit y en avoir un dans la classe Document.

    Je pense ajouter une notion de fragment à mon API, ce qui permettrait d'ajouter directement un bloc entier de XML à un endroit de l'arborescence. Ca permettrait d'assembler un XML à partir de morceaux...

    Faire dériver les exceptions de RuntimeException, c'est une bonne idée. Je vais y penser.

    Merci pour tes commentaires, en tout cas !

  4. #4
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    J'ai vite fait un tour dans tes sources. Je pensais avoir à faire à une lib qui convertit un bean en xml, il n'en est rien.

    Voici mes remarques (et questions) :
    • Qu'est-ce que cela apporte par rapport à JAXP (en dehors des performances, ce que je n'ai pas testé) ?
    • On peut utiliser une DTD, mais pas de schémas. Peut-on utiliser les namespaces ?
    • Il n'y a pas de notion de pretty print.


    Bon courage pour la suite.

  5. #5
    Invité de passage

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Par défaut
    Ce que ça apporte, c'est une approche que j'espère originale. Si c'est le cas, c'est déjà bien, je trouve. J'ai cherché d'autres briques logicielles qui procédaient de cette manière, et je n'ai rien trouvé. Des API qui transforment des beans en XML, il y en a déjà plusieurs, dont certaines font ça très bien (XStream), je ne vois pas l'intérêt qu'il y aurait à en créer une de plus...

    C'est une API "bête", dans le sens où elle ne comprend pas le XML qu'elle génère. Il n'y rien dans le genre d'un arbre comme dans DOM ou d'un bean sous-jacent dont le XML reprendrait la structure, comme dans XStream, par exemple. Ces approches ne se caractérisent pas spécialement par leurs performances.
    Ce qui veut dire que tu peux tout à fait inclure une référence à un XSD ou un namespace.

    Par contre, aucune notion de pretty print, effectivement. C'est compact. Cela dit, une méthode permettant de renvoyer un pretty print du document, ça pourrait être intéressant, peut-être. Faut que j'y réfléchisse...

    Le besoin qui m'a fait développer la première version de mon API, c'est un système qui permette de faire communiquer un serveur Java avec un client Flex, dans le cadre d'un projet de site grand public, donc avec une problématique de montée en charge très importante. Et là, les solutions existantes, y compris BlazeDS, ne tenaient tout simplement plus la route.

    Merci pour tes commentaires.

  6. #6
    Invité de passage

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Par défaut
    Je viens de mettre une version 0.6 en ligne. Les exceptions dérivent maintenant de RuntimeException (merci à gronono pour la suggestion), on peut ajouter un Document dans un autre Document (il est enraciné à l'emplacement courant dans le Document destination. Les informations d'entête, type déclaration XML ou DTD, sont supprimées. Le Document ajouté doit également être fermé, de manière à éviter de se retrouver dans une situation inconsistente et de générer un XML mal formé). J'ai également terminé d'écrire et générer la Javadoc. Je me propose maintenant de permettre la duplication d'un Document en cours de traitement, ce qui pourrait être intéressant pour générer des XML au contenu proche.

    Merci d'avance pour tout commentaire !

  7. #7
    Invité de passage

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Par défaut
    Bonjour,

    Je viens de mettre en ligne une version 0.7. Extrait du changelog :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    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, avant que ça ne devienne trop complexe, je vais commencer à écrire des tests unitaires pour l'existant, de manière à procéder plus méthodiquement pour la suite. J'en profiterais pour écrire de la javadoc pour les packages. La prochaine version sera donc une 0.7.1.

Discussions similaires

  1. [XML] Génération fichier XML pour RSS via PHP, problème lors de l'écriture
    Par gator dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 04/02/2012, 18h17
  2. génération de xml par flash
    Par Catalan dans le forum Flash
    Réponses: 1
    Dernier message: 12/01/2007, 04h33
  3. [DOM] Génération de XML tout pas beau :(
    Par scorpiwolf dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 23/05/2006, 15h49
  4. Génération de XML
    Par Julien.alkaza dans le forum C++Builder
    Réponses: 5
    Dernier message: 06/04/2005, 15h28
  5. [LOMBOZ]Génération WEB.XML
    Par JWillow dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 14/12/2004, 23h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo