utilitaire pour générer xsd à partir de la classe java
Je veux générer xsd pour la classe suivante
public class Node{
private String value;
private List<Node> childrens;
}
Quel est le meilleur utilitaire pour générer schéma xsd pour un tel code
En général, je veux implémenter un arbre simple. J'utilise déjà jaxb pour générer les classes à partir du schéma.
4 answers
Si vous utilisez déjà JAXB, vous pouvez utiliser l'outil schemagen
pour créer un XSD:
- http://docs.oracle.com/javase/6/docs/technotes/tools/share/schemagen.html
- http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Ftwbs_jaxbjava2schema.html
Il existe également des tâches Ant et des plugins Maven pour faire de même de manière automatisée.
Vous pouvez utiliser l'API generateSchema
sur JAXBContext
pour générer un schéma XML:
import java.io.IOException;
import javax.xml.bind.*;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Node.class);
jc.generateSchema(new SchemaOutputResolver() {
@Override
public Result createOutput(String namespaceURI, String suggestedFileName)
throws IOException {
return new StreamResult(suggestedFileName);
}
});
}
}
Il existe également des tâches Ant et des plugins Maven pour faire de même de manière automatisée.
Oui en effet il y en a. Avant de devoir le comprendre par vous-même, voici la version maven:
(1) Ajoutez le plugin maven à votre pom.xml
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>schemagen</id>
<goals>
<goal>schemagen</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- Renaming default 'schema1.xsd' -->
<transformSchemas>
<transformSchema>
<uri>http://www.your.url/namespace/foo</uri>
<toFile>your-schema-name.xsd</toFile>
</transformSchema>
</transformSchemas>
</configuration>
</plugin>
...
<plugins>
<build>
(2) Ajouter une classe package info (facultative):
package-info.java
à votre(vos) paquet (s) (java). Ce fichier contient le nom du paquet:
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.your.url/namespace/foo", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package url.your.namespace.foo;
(3) Ajoutez des annotations XML à vos classes comme
@XmlRootElement(name = "Container")
@XmlAccessorType(XmlAccessType.FIELD)
public class Container {
@XmlElement(name = "Info", required = true)
private Info info;
@XmlElement(name = "Unit")
private Unit unit;
...}
Alors vous suffit d'exécuter maven construire puis dans le dossier cible, vous trouverez le fichier xsd.
Si vous utilisez Eclipse ID, vous pouvez suivre les étapes de cette documentation officielle:
Générer un schéma à partir des classes
- Dans le Navigateur ou l'Explorateur de projets, sélectionnez Fichier > Nouveau > Autre. La boîte de dialogue Sélectionner un assistant apparaît.
- Sélectionnez JAXB > Schéma dans les classes JAXB, puis cliquez sur Suivant. La page Générer un schéma à partir de classes de l'Assistant Générer un schéma à partir de classes JAXB apparaît.
- Sélectionnez le projet, le package ou les classes à partir desquels générez le schéma et cliquez sur Terminer.