утилита для генерации XSD из класса Java - PullRequest
7 голосов
/ 13 марта 2012

Я хочу сгенерировать xsd для следующего класса

public class Node{
  private String value;
  private List<Node> childrens;

}

Какая лучшая утилита для генерации схемы xsd для такого кода

В общем, я хочу реализовать простое дерево.Я уже использую jaxb для генерации классов из схемы.

Ответы [ 3 ]

5 голосов
/ 13 марта 2012

Вы можете использовать API generateSchema на JAXBContext для генерации схемы 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);
            }

        });

    }

}
3 голосов
/ 13 марта 2012

Если вы уже используете JAXB, вы можете использовать инструмент schemagen для создания XSD:

Есть также задачи Ant и плагины Maven для автоматического выполнения этих действий.

0 голосов
/ 15 октября 2018

Есть также задачи Ant и плагины Maven для автоматического выполнения этих действий.

Да, действительно, есть. Прежде чем вы сами разберетесь в этом, вот версия maven:

(1) Добавьте плагин maven к вашему 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) Добавить информацию о пакете (необязательно):

package-info.java к вашему (java) пакету (-ам). Этот файл содержит имя пакета:

@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) Добавьте аннотации XML к своим классам, например

@XmlRootElement(name = "Container")
@XmlAccessorType(XmlAccessType.FIELD)
public class Container {

  @XmlElement(name = "Info", required = true)
  private Info info;
  @XmlElement(name = "Unit")
  private Unit unit;
...}

Тогда вам просто нужно выполнить сборку maven, а затем в целевой папке вы найдете файл xsd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...