2009-06-11 13 views
3

Können Sie XMSCatalog verwenden, um xsds in Schemaimportanweisungen aufzulösen? Wenn ja, was ist die bevorzugte/beste Praxis? Ich möchte die xsds in einem Jar verpacken, also hat die Verwendung eines relativen schemaLocation nicht funktioniert.Kann XMLCatalog für Schemaimporte verwendet werden?

Bisher Ich versuche, wie etwas zu tun:

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

Ohne viel Glück.

Antwort

5

Bei einem kurzen Blick sehe ich zwei Probleme:

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

Wenn Sie the Javadoc for this method schauen Sie

Kataloge lesen - eine geordnete Anordnung Liste der absolute URIs

was du nicht benutzt.

Das zweite Problem ist hier

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

Sie nicht die System-ID für das Schema so eingestellt, dass, wenn Sie eine relative Position für die Einfuhr haben dann die relativ zum aktuellen Verzeichnis Ihrer Anwendung statt gelöst werden des Verzeichnisses, in dem Sie Ihre Schemadatei haben. Sie müssen entweder auf der Quelle setSystemId anrufen oder die System-ID übergeben, wenn Sie es schaffen:

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

Danke für die Hilfe. Funktioniert die relative Suche, wenn sich die Dateien in einem Jar befinden? Es scheiterte, sobald ich die xsds eingoss. – jon077