2009-06-11 4 views
3

Pouvez-vous utiliser XMLCatalog pour résoudre xsds dans les instructions d'importation de schéma? Si oui, quelle est la meilleure pratique? Je veux emballer les xsds dans un pot, donc l'utilisation d'un schéma relatif n'a pas fonctionné.Est-ce que XMLCatalog peut être utilisé pour les importations de schéma?

Jusqu'à présent, je suis en train de faire quelque chose comme:

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

Sans beaucoup de chance.

Répondre

5

à un coup d'œil, je vois deux problèmes:

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

Si vous regardez the Javadoc for this method vous pouvez lire

catalogues - une liste de tableau ordonné de URIs absolus

ce qui n'est pas ce que vous utilisez.

Le deuxième problème est ici

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

Vous ne définissez pas l'identifiant système pour le schéma, donc si vous avez un emplacement relatif à l'importation alors qui sera résolu par rapport au répertoire courant de votre application au lieu du répertoire où vous avez votre fichier de schéma. Vous devez soit appeler setSystemId sur la source ou de transmettre l'identifiant du système lors de sa création:

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

Merci pour l'aide. La recherche relative fonctionnera-t-elle si les fichiers sont dans un pot? Il a échoué dès que j'ai jar'd les xsds. – jon077

Questions connexes