2017-08-17 1 views
0

dans mon pot je fournis mon fichier xsd de schéma, à savoir la structure suivante:Chargement XSD schéma dans JAR en utilisant des ressources ne

myjar 
- myschema.xsd 

Je peux vérifier que le fichier est présent au niveau de la racine à l'intérieur du JAR quand je décompresse il.

J'ajoute le schéma XSD à l'SchemaFactory de la manière suivante:

public void loadXSDSchema() throws InitializationException { 
    SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
    try { 
     xsdSchema = sf.newSchema(new File(getClass().getClassLoader().getResource(XSD_SCHEMA_FILE).getFile())); 
    } catch (SAXException e) { 
     throw new InitializationException(ApiExceptionId.INIT_XSD_SCHEMA, e); 
    } 

Malheureusement, il ne fonctionne pas dans le fichier JAR produit - Je reçois un FileNotFoundException:

Caused by: java.io.FileNotFoundException: D:\dev\myjar.jar!\myschema.xsd (Die Syntax f▒r den Dateinamen, Verzeichnisnamen oder die Datentr▒gerbezeichnung ist falsch) 

I Je pensais que je savais que vous deviez le lire comme une ressource quand il est emballé dans un bocal, mais la réalité me montre que je semble faire quelque chose de mal.

Des indices sur ce qui me manque?

Répondre

1

Vous ne pouvez pas l'obtenir en tant que fichier puisqu'il ne s'agit pas d'un fichier. C'est une entrée dans votre fichier jar. Les fichiers sont des objets du système d'exploitation et, du point de vue du système d'exploitation, le fichier jar est le fichier. Bien que vous pouvez obtenir un InputStream via ClassLoader et vous pouvez lire le contenu de celui-ci via cet InputStream.

Schema xsdSchema = sf.newSchema(new StreamSource(ClassLoader.getSystemResourceAsStream("shema.xsd"))); 
+0

Bon, maintenant je le vois. Je connaissais seulement la chose à propos de Resource, mais oui ça a beaucoup de sens, merci! – Stefan