【问题标题】:Generate a XSD from a JAXB-annotated class without using File在不使用 File 的情况下从带有 JAXB 注释的类生成 XSD
【发布时间】:2014-06-04 13:29:22
【问题描述】:

我正在尝试按照本文Is it possible to generate a XSD from a JAXB-annotated class中提到的代码从Java Annotated 类生成XSD

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

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

}

此技术使用文件系统,我的要求是在不使用文件系统的情况下将 XML 作为字符串。

SchemaOutputResolver 的实现是否有可能不会将文件写入磁盘并返回或设置一些带有字符串值的实例变量。

【问题讨论】:

    标签: java xml jaxb xsd


    【解决方案1】:

    您可以在StringWriter 上写入StreamResult 并从中获取字符串。

    JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
    MySchemaOutputResolver sor = new MySchemaOutputResolver();
    jaxbContext.generateSchema(sor);
    String schema = sor.getSchema();
    
    public class MySchemaOutputResolver extends SchemaOutputResolver {
        private StringWriter stringWriter = new StringWriter();    
    
        public Result createOutput(String namespaceURI, String suggestedFileName) throws IOException  {
            StreamResult result = new StreamResult(stringWriter);
            result.setSystemId(suggestedFileName);
            return result;
        }
    
        public String getSchema() {
            return stringWriter.toString();
        }
    
    }
    

    【讨论】:

    • 非常感谢,能否请您解释一下,您刚刚在createOutput 函数中做了什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    相关资源
    最近更新 更多