J'ai un fichier WAR webapp Java qui dépend de plusieurs fichiers jars dans son répertoire WEB-INF \ lib. L'un de ces JARS doit charger des fichiers de configuration en faisant class.getClassLoader().getResourceAsStream(...)
. Cependant, InputStream restaure null. Y a-t-il un problème avec cette approche lorsque le fichier JAR se trouve dans un fichier WAR? L'application est déployée sur Tomcat6.Java getResourceAsStream JAR à l'intérieur de WAR
PLUS D'INFO EDIT:
Je Tring à charger dans des requêtes SQL à partir des fichiers afin que je puisse les exécuter. Ceux-ci sont situés dans un pot séparé DAO dans le WAR de l'application Web, sous WEB-INF/lib
mywebapp.war
-- WEB-INF
-- lib
-- mydao.jar
---- com/companyname/queries
-- query1.sql
-- query2.sql
-- query3.sql
...
CODE UTILISATION DE CHARGE CLASSES
public class QueryLoader {
private static final Logger LOGGER = Logger.getLogger(QueryLoader.class.getName());
public String loadQuery(String fileName) {
final String newline = "\n";
BufferedReader reader = new BufferedReader(new InputStreamReader(
QueryLoader.class.getClassLoader().getResourceAsStream(
"/com/companyname/queries/" + fileName)));
StringBuilder sb = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
sb.append(newline);
}
} catch (IOException e) {
LOGGER.error(e);
}
J'ai aussi essayé de changer la ligne de getResourceAsStream à
Thread.currentThread().getContextClassLoader().getResourceAsStream(
sans succès.
Mon environnement de développement est MS Windows Vista et je rencontre la même erreur lors de son exécution sur cet environnement et sur Ubuntu.
comment puis-je assurer que je l'utilise le bon chargeur de classe? – Tarski
J'ai eu des problèmes avec le chargeur de classe dans un ancien projet, car cela utilisait un ClassX.class.getClassLoader() - (où ClassX est le plus, mais pas nessaire, dans le jar spécifique) puisque je n'ai pas eu le problème plus - Mais c'est seulement comment cela a fonctionné pour moi. – Ralph
Vous pouvez garantir un classloader correct en récupérant le classloader d'une classe que vous connaissez dans le même fichier JAR que la ressource que vous souhaitez charger. –