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.

Author: Julias, 2012-03-13

4 answers

Si vous utilisez déjà JAXB, vous pouvez utiliser l'outil schemagen pour créer un XSD:

Il existe également des tâches Ant et des plugins Maven pour faire de même de manière automatisée.

 3
Author: nwinkler, 2012-03-13 09:36:01

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);
            }

        });

    }

}
 7
Author: bdoughan, 2012-03-13 10:35:23

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.

 2
Author: Lonzak, 2018-10-15 12:04:47

Si vous utilisez Eclipse ID, vous pouvez suivre les étapes de cette documentation officielle:

Générer un schéma à partir des classes

  1. Dans le Navigateur ou l'Explorateur de projets, sélectionnez Fichier > Nouveau > Autre. La boîte de dialogue Sélectionner un assistant apparaît.
  2. 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.
  3. Sélectionnez le projet, le package ou les classes à partir desquels générez le schéma et cliquez sur Terminer.
 1
Author: 63RMAN, 2020-07-30 19:43:24