Java 可以从JAXB注释类生成XSD吗?
我已经使用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
像
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())代码>我在使用文件时遇到“未找到文件”异常。