XMLCatalog可以用于模式导入吗?

jon*_*077 3 java xml schema xmlcatalog

您可以使用XMLCatalog解析模式导入语句中的xsds吗?如果是这样,首选/最佳做法是什么?我想在一个jar中打包xsds,所以使用相对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")));
Run Code Online (Sandbox Code Playgroud)

没有太多运气.

小智 5

快速浏览一下,我看到两个问题:

XMLCatalogResolver catalogResolver = new XMLCatalogResolver(
        new String[]{"catalog.xml"});
Run Code Online (Sandbox Code Playgroud)

如果您查看此方法的Javadoc,您可以阅读

catalogs - 绝对URI的有序数组列表

这不是你用的.

第二个问题在这里

Schema schema = factory.newSchema(new StreamSource(ClassLoader
        .getSystemResourceAsStream("config.xsd")));
Run Code Online (Sandbox Code Playgroud)

您没有为架构设置系统ID,因此如果您具有导入的相对位置,那么将相对于应用程序的当前目录而不是您拥有架构文件的目录解析该位置.您需要在源上调用setSystemId或在创建时传递系统ID:

new StreamSource(ClassLoader.getSystemResource("config.xsd").toString())
Run Code Online (Sandbox Code Playgroud)