2009-09-05 5 views
0

J'utilise JBoss4.0.1 et Struts2.1.6Lire ressources dans le contexte (.war) à partir d'un fichier jar

J'ai une application qui ont un certain fichier de configuration (appConfig.xml dans le dossier WEB-INF/config) . Ce fichier de configuration contient les chemins relatifs des autres fichiers à lire (other.xml, some.xml etc.). L'application est déployée en tant que .war dans default/deploy

J'ai un package utilitaire qui lit les fichiers de configuration. J'ai déployé la utility.jar dans la méthode par défaut/lib

Dans c ontextInitialized de ServletContextListener Je lis le appConfig.xml et passant IOStream sur appConfig à ma classe utilitaire qui lit ce fichier et charge tous les chemins de contexte relatifs.

Comment puis-je lire ces fichiers maintenant? Parce que si j'essaie de créer un flux d'entrée, il est retourné NULL.

J'ai essayé de suivre dans la classe utilitaire.

méthode de lecture est appelée à l'intérieur de la méthode contextInitialized de ServletContextListener

public void read(){ 
this.getClass().getClassLoader.getResourceAsStream("/WEB-INF/config/some.xml"); 
} 

public void read(ClassLoader cl){ 
    cl.getResourceAsStream("/WEB-INF/config/some.xml"); --> Null 
    cl.getResourceAsStream("/../config/some.xml"); --> Null 
    cl.getResourceAsStream("../config/some.xml"); --> Null 
} 

public void read(ServletContext ct){ 
ct.getResourceAsStream("/WEB-INF/config/some.xml");. 
ct.getResourceAsStream("/../config/some.xml"); --> Null 
ct.getResourceAsStream("../config/some.xml"); --> Null 
} 
+0

J'ai essayé de poser une question similaire dans [ce post] (http://stackoverflow.com/questions/4585553/how-to-load-resource-from-jar-file-packaged-in-a-war-file/16082211 # 16082211). J'espère que cela t'aides. – Rupesh

Répondre

0

Aucun suivant fonctionnerait parce que/WEB-INF/config est pas classpath si classloader ne sait rien à ce sujet,

public void read(){ 
this.getClass().getClassLoader.getResourceAsStream("/WEB-INF/config/some.xml"); 
} 

public void read(ClassLoader cl){ 
    cl.getResourceAsStream("/WEB-INF/config/some.xml"); --> Null 
    cl.getResourceAsStream("/../config/some.xml"); --> Null 
    cl.getResourceAsStream("../config/some.xml"); --> Null 
} 

les 2 ne fonctionne pas car il sort du contexte (.. ne peut pas être premier élément),

public void read(ServletContext ct){ 

ct.getResourceAsStream("/../config/some.xml"); --> Null 
ct.getResourceAsStream("../config/some.xml"); --> Null 
} 

Je ne comprends pas très bien votre intention. Si vous savez que le fichier est dans "/WEB-INF/config/some.xml", pourquoi voulez-vous le lire depuis "/../config/some.xml"? Ce n'est pas une bonne idée de stocker le fichier de configuration à l'intérieur de la guerre. Vous devriez envisager de le déplacer ailleurs.

+0

merci pour vos commentaires, je veux juste ajouter un couple de choses pour votre compréhension. 1. WEB-INF/config est ajouté dans le chemin de la classe 2. Ceci est une configuration à une heure donc j'en ai besoin dans le fichier .war. 3. il peut y avoir un contexte d'application multiuple pour avoir la même configuration donc j'ai créé un paquet utilitaire qui lit ce type de configuration. Maintenant, dans le contexte, je veux que l'utilitaire lise mon fichier de configuration. J'espère que cela va mieux vous aider à comprendre le problème votre aide est appréciée. –

Questions connexes