web-dev-qa-db-fra.com

Est-il possible de générer un XSD à partir d'une classe annotée JAXB?

J'ai écrit un certain nombre de classes en utilisant JAXB pour la sérialisation et je me demandais s'il y avait un moyen de générer un fichier XSD pour chacun de ces objets en fonction des annotations. Existe-t-il un outil pour cela?

Quelque chose comme generate-xsd com/my/package/model/Unit.Java serait génial. Existe-t-il quelque chose pour cela?

45
Naftuli Kay

Oui, vous pouvez utiliser la méthode generateSchema sur JAXBContext:

JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
SchemaOutputResolver sor = new MySchemaOutputResolver();
jaxbContext.generateSchema(sor);

Vous tirez parti d'une implémentation de SchemaOutputResolver pour contrôler où va la sortie:

public class MySchemaOutputResolver extends SchemaOutputResolver {

    public Result createOutput(String namespaceURI, String suggestedFileName) throws IOException {
        File file = new File(suggestedFileName);
        StreamResult result = new StreamResult(file);
        result.setSystemId(file.toURI().toURL().toString());
        return result;
    }

}
73
bdoughan