Question

J'essayais d'ajouter le schéma XML à un projet EJB existant. JAXB est utilisé pour lier le schéma XML à une classe Java. Comme nous allons utiliser le moteur de recherche pour parcourir DTO lorsque l’EJB est en session.

Je n'ai trouvé aucune approche directe pour mapper le fichier de classe d'entités sur XML-Schema.

Pour l'instant, la seule solution consiste à créer les services Web, à générer le WSDL qui génère xml-schema (XSD), puis à analyser le fichier XSD via JAXB (commande xjc) pour créer des fichiers de classe java. En utilisant maintenant le fichier mapping-binding.xml, nous pouvons mapper les fichiers de classe XML et Java.

Mais maintenant, le problème est de savoir comment mapper ceci à la classe d'entités.

C’est ce que nous voulons réaliser:

  • Objet de données XML avec schéma XML (déjà présent dans la spécification JAXB).
  • Entity Bean puis étend ou dispose d’une interface avec cet objet JAXB.
  • Toutes les fonctions de persistance sont gérées par le bean Entity ...
  • Le bean Entity contiendrait alors les fonctionnalités XML Marshalling et UnMarshalling trouvées dans JAXB ..
  • Un objet de valeur peut être récupéré sous forme binaire ou XML à partir de l’objet Entity Bean.
  • Une JSP pourrait facilement extraire le schéma XML et les données XML de l'objet de valeur et y effectuer des opérations telles que des transformations XSL.

Mon argument est que les beans Entity ne disposent d'aucun moyen standard d'interfaçage avec des objets JAXB.

Castor est peut-être la solution, mais encore faut-il implémenter des services Web ou utiliser Castor JDO.

J'ai trouvé XStream très utile car il utilise une classe de conversion dans laquelle vous pouvez appeler les objets de classe de beans entity et générer un fichier xml. Mais je ne préférais pas utiliser une autre classe mais intégrer les fonctions à la classe de beans existante.

Pouvez-vous m'aider à cet égard?

Je vais vous dire ce que je cherche réellement à réaliser. Je crée un moteur de recherche qui sera évoqué lors de la session EJB, qui utilisera un robot d'exploration via le DTO et obtiendra l'instantané au format XML. La recherche sera effectuée sur différents critères.

Lucene est l’un des outils des moteurs de recherche, mais il utilise ensuite ses propres propriétés et fichiers (se comportera plutôt comme autonome)

J'ai déjà des DTO qui sont utilisés par les services Web pour communiquer entre PHP & amp; Application Java (couche EJB). Je voulais réutiliser ces DTO dans jaxb en tant que robot d'exploration pour obtenir la sortie de tables au format XML, ce que je ne suis pas en mesure de faire car JAXB utilise ses propres classes générées via xml-schema. Comme vous l'avez dit, je n'ai pas encore trouvé le moyen de charger JAXB de créer des classes de haricots.

Était-ce utile?

La solution

Le couplage étroit de votre modèle de données (beans entité) à votre interface XML n’est peut-être pas la meilleure idée au monde; cela vous empêche de changer l’un sans changer l’autre.

Je ne suis pas tout à fait sûr de comprendre ce que vous essayez de faire, mais je pense qu'il existe un moyen de demander à JAXB d'étendre les classes plutôt que d'en créer de nouvelles. Vous pouvez créer vos beans Entity comme d'habitude et demander à vos beans générés par JAXB de les étendre avec les informations supplémentaires.

Je peux dire que le fait d'obtenir des instances de beans Entity ailleurs que votre couche de persistance (telle que leur désérialisation à partir de XML) va devenir un problème énorme pour vous.

Notez également que l’utilisation de XML pour la communication entre applications Java (par exemple entre une couche JSP / Servlet et une couche EJB) est une mauvaise idée. le marshaling et la verbosité ajoutée du XML vous rapportent très peu; La sérialisation des objets via RMI (ce que EJB fera pour vous) serait beaucoup plus facile à implémenter, à tester et à maintenir.

Autres conseils

EclipseLink JAXB (MOXy) peut être utilisé pour mapper des entités JPA vers XML.

Pour plus d'informations, voir:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top