java - 在 Ant 中从 JAXB 类文件生成 XML 模式

标签 java ant xsd jaxb schemagen

是否可以使用 shemagen ant Task从类文件而不是源代码生成 xsd 架构?

最佳答案

您可能可以相当轻松地编写一些东西,然后从 Ant 中调用它:

import java.io.File;
import java.io.IOException;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.SchemaOutputResolver;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;

public class SchemaGenerator {

    public static void main(String[] args) throws Exception {
        String contextPath = args[0];
        String outputDir = args[1];
        JAXBContext jc = JAXBContext.newInstance(contextPath);
        jc.generateSchema(new MySchemaOutputResolver(schemaFileName));
    }

    private static class MySchemaOutputResolver extends SchemaOutputResolver {

        private String outputDir;

        public MySchemaOutputResolver(String outputDir) {
            this.outputDir = outputDir;
        }

        public Result createOutput(String namespaceURI, String suggestedFileName) throws IOException {
            File file = new File(outputDir + "/" + suggestedFileName);
            StreamResult result = new StreamResult(file);
            result.setSystemId(file.toURI().toURL().toString());
            return result;
        }

    }   

}

在您的上下文路径中,您需要一个包含要包含在您的 JAXBContext 中的类列表的 jaxb.in​​dex 文件。或者您可以将类名传递给 SchemaGenerator 类并通过 ClassLoader 加载它们。

关于java - 在 Ant 中从 JAXB 类文件生成 XML 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328831/

相关文章:

xml - 根据其他 XML 字段的值在 XSD 中设置 minOccurs 和 maxOccurs?

java - Android项目编译不成功(谷歌教程)

java - 根据模式验证 XML - 找不到元素声明

java - setRetainInstance() 方法是否保留 ArrayAdapter 数据?

java - Java 中使用 Shift_JIS 的日语字符编码

java - 进行部署时 build 和 dist 目录的目的不同

java - 如何设置 Gradle 自定义 ant 任务类路径?

java - 通过 XJC 生成可序列化的类,无需更改 xsd

java - #define 在 java/android studio 中使用

java - 如何从菜单处理程序重新实例化零件类?