Può XMLCatalog essere utilizzato per l'importazione dello schema?
-
13-09-2019 - |
Domanda
Si può utilizzare per risolvere XMLCatalog XSD nelle dichiarazioni dello schema di importazione? Se sì, qual è la prassi migliore / preferito? Voglio confezionare i XSD in un vaso, in modo da utilizzare uno schemaLocation relativa non ha funzionato.
Finora sto cercando di fare qualcosa di simile:
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")));
senza molta fortuna.
Soluzione
A una rapida occhiata vedo due problemi:
XMLCatalogResolver catalogResolver = new XMLCatalogResolver(
new String[]{"catalog.xml"});
Se si guarda a Javadoc per questo metodo si può leggere
cataloghi - una lista ordinata di serie assoluto URI
che non è quello che si usa.
Il secondo problema è qui
Schema schema = factory.newSchema(new StreamSource(ClassLoader
.getSystemResourceAsStream("config.xsd")));
Non impostare l'ID del sistema per lo schema, quindi se avete una posizione relativa per l'importazione allora che verrà risolto relativo alla directory corrente della vostra applicazione, invece della directory in cui avete il vostro file di schema. È necessario sia per chiamare setSystemId sulla sorgente o passare l'ID sistema quando si crea:
new StreamSource(ClassLoader.getSystemResource("config.xsd").toString())