2010-11-18 24 views
5

Il existe un ensemble de fichiers XSD, dont les types suivants sont décrits:Quel framework Java xml peut gérer la génération de code avec des restrictions/extensions dans les schémas?

A est un type complexe avec divers éléments. B limite A, ne conservant que certains de ses éléments C étend B, en ajoutant quelques éléments.

Donc, cela signifie qu'une classe Java générée par un outil en utilisant le type C à partir du schéma XML, devrait inclure uniquement les membres de A qui sont conservés par B, et les nouveaux ajoutés par C

Pour rendre les choses encore plus difficiles, B change réellement l'attribut minOccurs de certains éléments.

Existe-t-il des frameworks capables de gérer cela? J'ai essayé EMF et les restrictions ne sont même pas reflétées dans le code.

Répondre

2

Lors de l'utilisation de XSD complexes, j'ai obtenu les meilleurs résultats avec XMLBeans.

  • Il prend en charge le schéma XML complet.
  • C'était le seul framework qui pouvait générer du code correct pour les schémas XML complexes que je devais utiliser.

Une autre caractéristique très utile est:

Lorsque unmarshalling une instance XML du infoset XML complet est conservé et est disponible pour le développeur. Ceci est critique car à cause du sous-ensemble de XML qui n'est pas facilement représenté dans Java. Par exemple, l'ordre des éléments ou des commentaires peut être nécessaire dans une application particulière.

+0

Merci Martin, en effet, il semble soutenir le schéma complet. – mahonya

2

est ici antoher alternatif (pour que vous pouvez choisir un): Le Axis2 DataBinding Framework (BAD) soutient la hiérarchie de type et les restrictions personnalisées.

Plus: Il génère la structure complète du schéma et implémente accesseurs de chaque élément. Sur les setters de chaque type, y vérifie les restaurations définies par le schéma, et lorsque la valeur à définir ne correspond pas à la restriction, il lance une exception (à la propre méthode set) et supporte StAX pour la sérialisation/désérialisation. Le code généré peut être un peu trop bavard, les exceptions de validation sont trop peu explicatives, il est censé être "simple" (donc avec des extensions de type complexes ou des restrictions vous pourriez trouver quelques problèmes), et il inclut certaines dépendances avec la bibliothèque ADB (ie les beans générés implémentent l'interface org.apache.axis2.databinding.ADBBean).

+0

page BAD contient les éléments suivants en bas: « Limitations connues BAD est censé être un cadre de liaison de données « simple » et n'a pas été conçu pour compiler tous les types de schémas Les limitations suivantes sont les plus mis en évidence 1.. Extensions de type complexe et restrictions " – mahonya

+0

Oui, je l'ai mentionné comme un Con.Mais je l'ai utilisé pour sérialiser certaines données herarchichal (une classe parente, et un ensemble de classes étendues, quelques relations de composition/agrégation), et avec les restrictions habituelles supportées par XSD (telles que nullability, nombre d'occurrences, correspondance regex, etc.), et a bien fonctionné. Le point ici est que les exceptions de validation ont été générées avec un message vide, ce qui peut être un problème. –