不使用File从JAXB注释类生成XSD

PHP*_*ger 3 java xml xsd jaxb

我试图通过以下代码中提到的代码从Java Annotated类生成XSD 是否可以从JAXB注释类生成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;
    }

}
Run Code Online (Sandbox Code Playgroud)

这种技术使用文件系统,我的要求是在不使用文件系统的情况下将XML作为String.

是否有可能实现SchemaOutputResolver可能无法将文件写入磁盘并返回或设置一些具有String值的实例变量.

bdo*_*han 6

你可以写StreamResult一个StringWriter并从中获取字符串.

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

}
Run Code Online (Sandbox Code Playgroud)