Existe-t-il une API JavaScript pour la liaison XML – analogique pour JAXB pour Java?

En Java, nous travaillons beaucoup avec JAXB2. Les mappages <-> XML de l'objet sont définis comme des annotations dans les classes Java:

@XmlRootElement(name="usertask", namespace="urn:test") public class UserTask { @XmlElement(namespace="urn:test") public String getAssignee() { ... } public void setAssignee(String assignee) { ... } } 

JAXB runtime peut lire ces annotations et créer unmarshaller pour analyser XML dans une instance d'objet ou marquer un objet en XML.

JAXB embarque un compilateur de schéma (XJC) qui peut générer des classes annotées hors des schémas XML, ce qui constitue une autre fonctionnalité exceptionnelle.


Dernièrement, nous avons travaillé beaucoup avec JavaScript côté client. Nous avons également besoin d'un traitement XML. Par exemple, nous devons analyser des documents WPS comme celui-ci . Ces documents sont également conformes à différents schémas XML (voici le schéma WPS 1.0.0 pour l'exemple XML). Il serait formidable de travailler avec des objets JavaScript au lieu de XML, ce qui permet d'économiser énormément d'efforts. Dans certains cas, nous pouvons utiliser des solutions basées sur JSON comme DWR , mais dans de nombreux cas, nous devons traiter XML sur le client.

Ma question est:

Y at-il un peu d'analogique de JAXB pour JavaScript?

Un outil qui compilerait un schéma XML dans un mappage d'objet XML <-> et fournirait un temps d'exécution pour convertir des objets XML et JavaScript.

Je pourrais facilement imaginer des mappages générés sous une forme comme:

 UserTask = new JSXML.XmlRootElement({ name: "usertask", namespace: "urn:test", properties: [ { assignee: new JSXML.XmlElement({ name: "assignee", namespace: "urn:test", type: new JSXML.XSD.String() }) } ] }); 

Et cela devrait être assez simple pour créer un marshaller ou un marshaller.

En savoir plus sur le support JSON pour JAXB? Réutilisez vos classes de modèle annotées JAXB courantes, mais émetz JSON à partir de vos extrémités REST.

Les versions actuelles de Jersey supportent ceci (via le module jersey-json ) avec JSONJAXBContext .

Vous pouvez également essayer le support JAXB et JAX-RS de Jackson .

À ce jour, je n'ai trouvé rien de semblable à ce dont j'ai besoin. Par conséquent, j'ai décidé de le mettre en œuvre moi-même. Voici la page du projet:

http://confluence.highsource.org/display/MISC/Jsonix

Le projet est hébergé sur GitHub:

https://github.com/highsource/jsonix/

Je n'ai pas essayé cela, donc je ne suis pas sûr de savoir si cela fonctionnera, mais avez-vous envisagé d'utiliser GWT afin que vous puissiez toujours utiliser JAXB et écrire l'application entière comme une application java? Je ne sais pas si GWT prend en charge JAXB (probablement pas), mais il peut y avoir une alternative pour l'analyse XML qui prendra en charge. Si cela fonctionne, vous pouvez automatiser la création de vos modèles javascript via gwt, puis les inclure dans votre application. Oui, c'est beaucoup plus cher que vous le souhaitez, mais il faut que vous l'écrivez à partir de zéro.

Ce que vous pouvez faire, c'est ajouter une définition générique de la feuille de style: XSLT à votre XML pour les convertir dans JSON. Par exemple: http://code.google.com/p/xml2json-xslt/

Manipuler XML avec Javascript est une douleur par rapport à JSON, en particulier le navigateur croisé.
La feuille de style ajoutera un petit frais généraux à votre demande. Soit sur le serveur ou sur le client, vous pouvez choisir, mais vous devez comparer cela à la complexité et à la vitesse du code pour analyser et lire le XML avec Javascript sur différents navigateurs.