La machine prévue n'a pas de connexion à Internet et je ne veux pas la charger en utilisant un emplacement fixe. Objectif: Pour charger des DTD à partir d'un fichier jar, le fichier jar sera une dépendance.Comment charger les DTD à partir d'un fichier JAR?
Répondre
Pour charger un fichier à partir du chemin de classe (il est, l'espace où youre cours résident, généralement un tas de pots) vous pouvez faire:
InputStream is = this.getClass().getResourceAsStream("my/package/ResourceFile.dtd");
Et puis vous pouvez utiliser le flux d'entrée où vous voulez .
Remarque: getResourceAsStream() charge la ressource à l'aide du chargeur de classe qui a chargé la classe. Si vous faites une application, n'importe quelle classe de votre application (et par conséquent chargée par le même classloader avec vos pots) ira bien.
Il n'existe pas de façon standard de fournir un cache local (CATALOG si je me souviens bien) des DTD. Par conséquent, vous devrez rechercher l'analyseur qui utilisera les copies locales et utiliser son API de configuration non standard pour lui faire part de ces copies locales afin d'éviter le déclenchement sur le réseau.
Utilisez la méthode getResourceAsStream() pour sélectionner les entrées du chemin de classe.
Et comment puis-je dire au JAXB Unmarshaller d'utiliser cet InputStream? –
Ne sait pas à propos de JAXB. Il y a un Q & A sur la désactivation de la vérification DTD. Peut-être que cela aide. http://stackoverflow.com/questions/9909465/how-to-disable-dtd-fetching-using-jaxb2-0 – helios