Y a-t-il une bibliothèque qui pourrait générer un schéma XSD d'une classe Java? Google donne beaucoup de résultats les résultats opposés (classes Java de XSD). P>
4 Réponses :
Jibx fait cela p>
L'outil générateur de schéma est d'abord lit une ou plusieurs définitions de liaison à JIBX puis utilise la réflexion pour interpréter la structure des classes Java référencé dans les fixations. Par combinant les définitions de liaison avec les informations de la classe actuelles le Le générateur de schéma est capable de construire un ou plusieurs schemas XML pour représenter les documents traités par les liaisons. P> blockQuote>
JAXB 2.0 vous permet de créer un schéma XML à partir d'une classe Java annotée. P>
Vous trouverez quelques exemples sur AMIS blog et au site Javapassion < / a>. p>
Je suis censé être un expert Jaxb, et je ne le savais pas. Que c'est embarrassant. +1 à vous, monsieur.
Il y avait une certaine quantité de Google-Fu impliqué :) Aucune raison d'être surprise là-bas.
Les deux liens sont cassés
Voici comment je le ferais:
try { ByteArrayOutputStream stream = new ByteArrayOutputStream(); pojoToXSD(NESingleResponse.class, stream); String finalString = new String(stream.toByteArray()); System.out.println(finalString); } catch (JAXBException ex) { Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex); }
Où va l'objet pojo?
Merci d'avoir donné votre méthode. Je voulais juste ajouter un exemple complet.
import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.SchemaOutputResolver; import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import test.Test; public class Main { public static void main(String[] args) throws JAXBException, FileNotFoundException { JAXBContext context = JAXBContext.newInstance("test"); try { new Main().pojoToXSD(context, new Test(), System.out); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void pojoToXSD(JAXBContext context, Object pojo, OutputStream out) throws IOException, TransformerException { final List<DOMResult> results = new ArrayList<DOMResult>(); context.generateSchema(new SchemaOutputResolver() { @Override public Result createOutput(String ns, String file) throws IOException { DOMResult result = new DOMResult(); result.setSystemId(file); results.add(result); return result; } }); DOMResult domResult = results.get(0); com.sun.org.apache.xerces.internal.dom.DocumentImpl doc = com.sun.org.apache.xerces.internal.dom.DocumentImpl) domResult.getNode(); // Use a Transformer for output TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(out); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.transform(source, result); } } //---------- below will go in test package package test; import javax.xml.bind.annotation.XmlRegistry; import javax.xml.namespace.QName; @XmlRegistry public class ObjectFactory { private final static QName _Test_QNAME = new Name("urn:vertexinc:enterprise:calendar:1:0", "Test"); public ObjectFactory() { } public Test createTest() { return new Test(); } } package test; public class Test { String name; String cls; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCls() { return cls; } public void setCls(String cls) { this.cls = cls; } }