2009-06-11 68 views
3

您可以使用XMLCatalog来解析模式导入语句中的xsds吗?如果是这样,那么首选/最佳做法是什么?我想将xsds打包到一个jar文件中,所以使用相关的schemaLocation没有奏效。XMLCatalog可以用于模式导入吗?

到目前为止,我试图做这样的事情:

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"))); 

没有多少运气。

回答

5

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

XMLCatalogResolver catalogResolver = new XMLCatalogResolver(
     new String[]{"catalog.xml"}); 

如果你看看the Javadoc for this method你可以阅读

目录 - 的 绝对URI

有序数组列表这不是你使用的。

第二个问题是在这里

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

你不设置系统ID的模式,所以如果你有一个相对位置,然后导入,将相对于应用程序的当前目录,而不是解决你有你的模式文件的目录。你需要要么调用来源setSystemId或通过系统ID,当你创建:

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

感谢您的帮助。如果文件在jar中,相对查找是否会起作用?一旦我打开了xsds,它就失败了。 – jon077 2009-06-11 21:09:40