是否可以从 JAXB 注释的类生成 XSD?
我已经使用JAXB编写了许多用于序列化的类,我想知道是否有一种方法可以根据注释为每个对象生成XSD文件。有没有一个工具可以做到这一点?
像这样的东西会很棒。有什么东西可以做到这一点吗?generate-xsd com/my/package/model/Unit.java
我已经使用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;
}
}
我已经修改了一下答案,以便我们可以传递我们的类,并获取已创建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;
}
}