2009-06-11 71 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