Java 可以从JAXB注释类生成XSD吗?

Java 可以从JAXB注释类生成XSD吗?,java,xsd,jaxb,Java,Xsd,Jaxb,我已经使用JAXB编写了许多用于序列化的类,我想知道是否有一种方法可以基于注释为这些对象中的每一个生成XSD文件。有这个工具吗 像generate-xsd-com/my/package/model/Unit.java这样的东西将非常棒。有什么东西可以做到这一点吗 是的,您可以在JAXBContext上使用generateSchema方法: JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class); SchemaOutput

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


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

是的,您可以在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;
    }

}

另外,请参阅Maven插件:嗨,这个方法对我来说什么都不做(
createOutput
从未调用)。我正在使用以下实现:
com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl
。有什么想法吗谢谢,已尝试断点和System.err.print。我正在使用
jaxb.index
文件从包名创建上下文。我的上下文在其他方面工作得很好(它封送对象图没有任何问题)。这很奇怪,因为接口只包含一个方法(getter),并且它与JAXB属性无关所以这个例子非常好,不需要额外的魔法,但是模式生成器比封送器更挑剔而不是
result.setSystemId(文件.toURI().toul().toString())我在使用文件时遇到“未找到文件”异常。