Java XMLCatalog可以用于模式导入吗?

Java XMLCatalog可以用于模式导入吗?,java,xml,schema,xmlcatalog,Java,Xml,Schema,Xmlcatalog,能否使用XMLCatalog解析模式导入语句中的XSD?如果是,首选/最佳做法是什么?我想将XSD打包在一个jar中,因此使用相对的schemaLocation是行不通的 到目前为止,我正在尝试做如下工作: SchemaFactory factory = SchemaFactory .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); XMLCatalogResolver catalogResolver = new XMLCatalo

能否使用XMLCatalog解析模式导入语句中的XSD?如果是,首选/最佳做法是什么?我想将XSD打包在一个jar中,因此使用相对的schemaLocation是行不通的

到目前为止,我正在尝试做如下工作:

SchemaFactory factory = SchemaFactory
        .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
XMLCatalogResolver catalogResolver = new XMLCatalogResolver(
        new String[]{"/path/to/catalog.xml"});
factory.setResourceResolver(catalogResolver);

Schema schema = factory.newSchema(new StreamSource(ClassLoader
        .getSystemResourceAsStream("config.xsd")));

运气不好。

快速看一下,我发现两个问题:

XMLCatalogResolver catalogResolver = new XMLCatalogResolver(
        new String[]{"catalog.xml"});
如果你看你可以阅读

目录-目录的有序数组列表 绝对URI

这不是你用的

第二个问题在这里

Schema schema = factory.newSchema(new StreamSource(ClassLoader
        .getSystemResourceAsStream("config.xsd")));
您没有设置架构的系统id,因此如果您有导入的相对位置,则该位置将相对于应用程序的当前目录而不是架构文件所在的目录进行解析。您需要调用源上的设置系统id,或者在创建系统id时传递系统id:

new StreamSource(ClassLoader.getSystemResource("config.xsd").toString())

谢谢你的帮助。如果文件在jar中,相对查找会起作用吗?我一敲XSD它就失败了。