是否可以从 JAXB 注释的类生成 XSD?

2022-08-31 20:58:41

我已经使用JAXB编写了许多用于序列化的类,我想知道是否有一种方法可以根据注释为每个对象生成XSD文件。有没有一个工具可以做到这一点?

像这样的东西会很棒。有什么东西可以做到这一点吗?generate-xsd com/my/package/model/Unit.java


答案 1

是的,您可以在 JAXBContext 上使用以下方法:generateSchema

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

您可以利用 的实现来控制输出的去向:SchemaOutputResolver

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

}

答案 2

我已经修改了一下答案,以便我们可以传递我们的类,并获取已创建XSD文件的位置:path

public class SchemaGenerator {
    public static void main(String[] args) throws JAXBException, IOException {
        JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
        SchemaOutputResolver sor = new MySchemaOutputResolver();
        jaxbContext.generateSchema(sor);
    }
}

class MySchemaOutputResolver extends SchemaOutputResolver {
    @SneakyThrows
    public Result createOutput(String namespaceURI, String suggestedFileName) {
        File file = new File(suggestedFileName);
        StreamResult result = new StreamResult(file);
        result.setSystemId(file.getAbsolutePath());
        System.out.println(file.getAbsolutePath());
        return result;
    }
}

推荐