0
votes

Existe-t-il un moyen de créer une classe .java à partir d'un schéma XML utilisant le code Java et non un programme externe?

Je explique d'abord mon vrai problème.

J'ai un XML et le schéma xml (un xsd ). Je veux le transformer en JSON . xml et son schéma peut changer, je dois donc le faire au moment de l'exécution.

Maintenant, le XSD peut être un type très complexe. Je sais que cela existe des bibliothèques qui transforment xml vers json directement, mais je ne pense pas qu'ils vont bien fonctionner avec des structures compliquées.

Mon intention était d'utiliser jackson , mon JSON bibliothèque. Mais jackson nécessite un java classe et un objet java pour sérialiser l'objet comme JSON . .

Alors j'ai pensé à jaxb . Avec jaxb je peux créer un .java à partir d'un schéma xml .

Après cela, je peux charger la classe à l'exécution et, avec jaxb , créer une instance de la classe à l'aide du xml . Alors jackson .

Le problème est que je n'ai pas trouvé d'exemple, et je n'ai rien trouvé dans Jaxb API DOCS, comment utiliser jaxb pour convertir un < Code> xml schéma à une classe Java à l'aide de son API . Tous les exemples suggèrent d'utiliser programmes externes pour générer les classes. Je ne veux pas faire ce , puisque IMHO c'est moins portable.

Il n'y a pas de moyen d'utiliser jaxb ou une autre java bibliothèque, pour convertir un "code> xml schéma en une classe .java en utilisant < Code> Java code et non un outil externe?

Alternativement, il n'y a pas de moyen de convertir xml vers json , à l'aide du schéma xml comme source de sa structure?

PS: J'utilise Java Azul Zulufx 8. Je ne pense pas que ce soit pertinent, mais vous ne savez jamais.


11 commentaires

Il semble que vous recherchiez ce Stackoverflow.com/a/7248944/1162620


Si je ne me trompe pas, vous demandez, si vous pouviez générer une classe Java à l'aide du code Java. Si c'est la chose, alors même mon commentaire reste pareil. Que cette pas bibliothèque externe, qui fait partie de JDK


@RAVI I explicitement a demandé à propos de la réflexion sans programmes externes, mais en utilisant uniquement le code Java.


@Ravi Vous pouvez poster le code Java ou simplement me diriger vers la documentation de l'API d'une bibliothèque qui fait ce que je cherche.


J'ai déjà pointé une bibliothèque pour vous


Laissez-nous Continuez cette discussion en chat .


Désolé, je ne sais rien d'autre, ce qui pourrait vous aider .. Alors, ne pas dire avoir de nouvelles discussions. Merci.


@Ravi: C'est incroyable ... vous avez bownvothed ma question et demanda de près parce que ce n'est pas clair. Ma question est très Clear: je veux faire ce que vous avez lié, mais pas avec ce programme externe, mais en utilisant Java. D'accord?


@Ravi En outre, je vous ai aimablement demandé de continuer la discussion dans une discussion privée, où j'ai essayé de vous expliquer mon point. Vous l'avez évité complètement. Je n'ai pas de mots.


Vous allez toujours utiliser JDK, si vous utilisez Java, pouvez-vous justifier, comment utiliser la bibliothèque JDK serait moins portable Je ne veux pas faire cela, car IMHO c'est moins portable. ? Et, vous vous attendez à écrire du code, si non, puis montrez-nous votre code, au lieu d'écrire une longue question. Être spécifique. Et c'est la raison, j'ai bownvote. Si cela vous inquiète, vous modifiez votre question afin que je revienne mon vote. Merci


@RAVI: Le lien que vous avez posté affiche un exemple qui utilise un programme externe et non une bibliothèque JDK. Peut-être que vous avez mal le lien, je ne sais pas. Quoi qu'il en soit, je ne peux pas poster le code car je n'ai rien à poster! Je ne sais pas comment faire cette chose et poster le code précédent qui fait quelque chose de quelque chose de complètement inutile. Je pense que j'étais très précis, j'ai décrit mon vrai problème dans les détails et j'ai demandé une solution. Je n'ai jamais demandé au code. Je répète, si vous voulez poster le lien vers l'API dont j'ai besoin, comme l'ayé quelquega, vous êtes libre de le faire. Et je ne sais pas vraiment comment puis-je améliorer ma question, sérieusement.


4 Réponses :


0
votes

Si vous utilisez Eclipse, vous pouvez simplement cliquer avec le bouton droit de la souris sur le schéma, cliquez sur Générer et choisissez des classes JAXB. Suivez ensuite le simple sorcier et il créera des cours de Java pour vous.


1 commentaires

Non, je veux le créer à l'aide d'un script.



0
votes

Si vous choisissez un analyseur XML prenant en charge la validation XSD, il peut également fournir une API à interroger les informations définies dans le XSD. Vous pourriez essayer des XERCES.

S'il n'y a pas de tel API, vous devrez analyser vous-même le XSD. Créez une instance d'analyseur pour analyser le XML et une pour analyser le XSD. La structure XSD n'est pas si compliquée, il convient donc de combiner les informations du XML et du XSD.

Ensuite, écrivez simplement les informations sur un fichier .java à l'aide de java.io.


0 commentaires

0
votes

Il existe des convertisseurs (XML à JSON) en ligne (tels que Celui-ci ), donc il faisait.

Cependant, ce sont des programmes externes. Si vous voulez quelque chose de interne, je crains que vous n'ayez besoin de l'écrire vous-même. Juger de la question et vos commentaires Je suppose que vous le souhaitez comme faisant partie d'un programme et non comme un plugin pour IDE (ou je pourrais me tromper, corrigez-moi sinon)

XML à JSON ne devrait pas être très difficile à faire - lire tous les nœuds de nœuds et enfants de manière récursive (comment lire des nœuds d'enfants exemple ) et créez un fichier JSON à partir de celui-ci

Faire de XML à Java serait un peu plus délicate et pourrait avoir besoin d'une assistance (selon la façon dont vous voulez le faire)

Une approche tout à fait naïve serait de tout avoir comme des cordes. Donc tom serait nom de chaîne = "tom"; , mais 30 serait cordle Âge = "30"; aussi. Tout ce que "tout est une chaîne" approche nécessiterait une intervention humaine, car certains éléments peuvent être des chiffres à première vue, mais pourraient être des chaînes (par exemple, des bâtiments numéros: 1, 2, 3, 3a 3A , ...)


0 commentaires

1
votes

La bibliothèque de soussecore-java peut lire la chaîne XML sur une carte et générer JSON à partir de la carte de la carte. . Je suis le responsable du projet.

Msp<String, Object> map = U.fromXmlMap(xml);
String json = U.toJson(map);


3 commentaires

Relier? Exemple? Il utilise également les informations de la XSD ou une conversion par défaut standard?


J'ai ajouté un lien et un exemple.


Eh bien, merci, mais je dois utiliser le XSD pour générer une classe Java spécifique et non une carte générique.