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.

È stato utile?

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())
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top