Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1032 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java J2EE Servlet] récupérer des fichiers inclus dans un war

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java J2EE Servlet] récupérer des fichiers inclus dans un war

n°1302642
axk47
Java Man vs Boolet Man
Posté le 10-02-2006 à 10:01:03  profilanswer
 

bonjour,
Voici mon probleme
 
j'ai crée une archive war pour des tests (Cactus)  
le problème est que dans mes classes java je fais appel à des fichiers de tests(xml) qui sont contenus dans un répertoire qui s'appelle testfiles.
 
par exemple dans mon  code Java
j'ai ceci
 

Code :
  1. package tests.catcus;
  2. //import  
  3. public class MyCactusTest extends ServletTestCase{
  4. public static final String DIRECTORY_TEST="./testfiles/";
  5. public void testToto() throws IOException{
  6. String ficheTest=getFileToTest("monfichierTest.xml" );
  7. //envoie la requet HTTP avec le contenu du fichier que je vient de lire
  8. }
  9. private String getFileTotest(String file) throws
  10.          IOException {
  11.          InputStream stream = new FileInputStream(DIRECTORY + File.separator +
  12.                                                   file);
  13.          if (logger.isDebugEnabled()) {
  14.            logger.debug("getting Input Stream for file : " + file);
  15.            logger.debug("InputStream is null ? : " + (stream == null));
  16.          }
  17. return getContenuFichier(stream);
  18.    //getContenuFichier(String) permet de récupérer le contenu d'un fichier XML
  19.        }
  20. }


Mon probleme est que mes tests foirent à cause d'une erreur claire et précise du type
(file machin.xml not found), mais que je n'arrive aps à resoudre
En voici une trace
 

Code :
  1. ./testfiles/monFichierTest.xml (No such file or directory)
  2. java.io.FileNotFoundException: ./testfiles/monFichierTest.xml  (No such file or directory)
  3. at java.io.FileInputStream.open(Native Method)
  4. at java.io.FileInputStream.<init>(FileInputStream.java:106)
  5. at java.io.FileInputStream.<init>(FileInputStream.java:66)
  6. at tests.cactus.GetProfileTestCase.getInputStream(Unknown Source)
  7. at tests.cactus.GetProfileTestCase.beginGetProfile01(Unknown Source)
  8. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  9. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  10. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  11. at org.apache.cactus.internal.client.ClientTestCaseCaller.callGenericBeginMethod(ClientTestCaseCaller.java:358)
  12. at org.apache.cactus.internal.client.ClientTestCaseCaller.callBeginMethod_aroundBody0(ClientTestCaseCaller.java:192)
  13. at org.apache.cactus.internal.client.ClientTestCaseCaller.callBeginMethod_aroundBody1$advice(ClientTestCaseCaller.java:124)
  14. at org.apache.cactus.internal.client.ClientTestCaseCaller.callBeginMethod(ClientTestCaseCaller.java)
  15. at org.apache.cactus.internal.client.ClientTestCaseCaller.runTest(ClientTestCaseCaller.java:141)
  16. at org.apache.cactus.internal.AbstractCactusTestCase.runBareClient(AbstractCactusTestCase.java:215)
  17. at org.apache.cactus.internal.AbstractCactusTestCase.runBare(AbstractCactusTestCase.java:133)
  18. at org.apache.cactus.server.runner.ServletTestRunner.run(ServletTestRunner.java:315)
  19. at org.apache.cactus.server.runner.ServletTestRunner.doGet_aroundBody0(ServletTestRunner.java:193)
  20. at org.apache.cactus.server.runner.ServletTestRunner.doGet_aroundBody1$advice(ServletTestRunner.java:124)
  21. at org.apache.cactus.server.runner.ServletTestRunner.doGet(ServletTestRunner.java)
  22. at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
  23. at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
  24. at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996)
  25. at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
  26. at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:315)
  27. at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6452)
  28. at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
  29. at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
  30. at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3661)
  31. at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2630)
  32. at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
  33. at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)


Ma question est de savoir à quel endroit dois-je placer les fichiers de tests au niveau du war afin de pouvoir y acceder en relatif comme c'est indiqué dans le code java.
est -ce dans le WEB-INF??? ou il faut que je foute mes fichiers de tests dans le meme repertoire que mes fichiers.class.
 
 
Sinon je seche depuis hier soir la dessus, si quelqu'un a une idée merci d'avance.


---------------
"Rendez tout aussi simple que possible mais ne simplifierez rien" Albert Einstein
mood
Publicité
Posté le 10-02-2006 à 10:01:03  profilanswer
 

n°1302662
souk
Tourist
Posté le 10-02-2006 à 10:26:19  profilanswer
 

le plus simple est de les mettre dans ton classpath et d'y acceder via un getResource(String)

n°1302728
axk47
Java Man vs Boolet Man
Posté le 10-02-2006 à 11:17:40  profilanswer
 

souk a écrit :

le plus simple est de les mettre dans ton classpath et d'y acceder via un getResource(String)


 
Merci pour ta réponse souk
 
Mais quand tu exécutes une Servlet via le browser tu ne spécifies pas de classpath. Je me trompe peut-etre.
 
Ou tu parlait du classpath du fichier META-INF contenu dans le war.
 
Ou bien il suffit juste que je copie mes fichiers de tests dans le meme repertoire que que celui du war.
j'avoue que je ne comprends pas tres bien.
 
Peux-tu etre plus explicite s'il te plait...
 
Merci d'avance


---------------
"Rendez tout aussi simple que possible mais ne simplifierez rien" Albert Einstein
n°1302759
souk
Tourist
Posté le 10-02-2006 à 11:37:11  profilanswer
 

visiblement tu ne vois pas clairement ce qu'est le classpath, je te conseille de lire le topic de Benou (il y a un lien disponible dans le topic debutant java). Une fois que tu verras bien ce qu'est le classpath, tu pourras comprendre ma reponse. Pour acceder à une resource qui se trouve dans le classpath, tu peux aller lire ca
 
[:romf]

n°1302970
axk47
Java Man vs Boolet Man
Posté le 10-02-2006 à 14:52:50  profilanswer
 

souk a écrit :

visiblement tu ne vois pas clairement ce qu'est le classpath, je te conseille de lire le topic de Benou (il y a un lien disponible dans le topic debutant java). Une fois que tu verras bien ce qu'est le classpath, tu pourras comprendre ma reponse. Pour acceder à une resource qui se trouve dans le classpath, tu peux aller lire ca
 
[:romf]


 
 
Merci Souk,
mais ce n'est pas tant ma méconnaissance du CLASSPATH qui pose problème mais ma méconnaissance du fonctionnement des resources inlcuses dans un war qui me posent problème.
J'ai déjà manipulé des resources incluses dans des jars et effectivement j'avais utilisé le ClassLoader pour acceder à mes images en relatif sans avoir eu recours de façon explicite au CLASSPATH.
 
Merci des que ça marche je posterai la piste à suivre pour à qui ça interesse
 
A+


---------------
"Rendez tout aussi simple que possible mais ne simplifierez rien" Albert Einstein
n°1303022
the real m​oins moins
Posté le 10-02-2006 à 15:25:23  profilanswer
 

ya right :\


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1303637
benou
Posté le 12-02-2006 à 01:55:52  profilanswer
 

le war c'est la version packagé d'une application web.
Ce n'est pas à toi d'y accéder directement ... Toi, si tu codes une servlet qui fait parti de ce war, tu dois utiliser les ressources qui te sont mises à disposition par le moteur de servlet => soit des données récupérées dans le JNDI, soit des données contenues dans l'application web et accessible en lecture seule via les méthodes getRessource et getRessourceAsStream de l'objet ServletContext.
 
Après tu peux toujours accéder au système de fichier correspondant au répertoire de l'application en utilisant la méthode getRealPath(), mais ce n'est pas la méthode préconisée, sauf cas spécial.

Message cité 1 fois
Message édité par benou le 12-02-2006 à 01:58:25
n°1320964
axk47
Java Man vs Boolet Man
Posté le 08-03-2006 à 15:01:01  profilanswer
 

benou a écrit :

le war c'est la version packagé d'une application web.
Ce n'est pas à toi d'y accéder directement ... Toi, si tu codes une servlet qui fait parti de ce war, tu dois utiliser les ressources qui te sont mises à disposition par le moteur de servlet => soit des données récupérées dans le JNDI, soit des données contenues dans l'application web et accessible en lecture seule via les méthodes getRessource et getRessourceAsStream de l'objet ServletContext.
 
Après tu peux toujours accéder au système de fichier correspondant au répertoire de l'application en utilisant la méthode getRealPath(), mais ce n'est pas la méthode préconisée, sauf cas spécial.


 
 
Merci benou pour cette piste.
Maintenant que je l'ai empruntée je suis confronté à un nouveau problème: comment initialiser les objets
config,session car elle sont à  null.  
Et je n'arrive donc pas à invoquer la méthode getServletContext sur ces objets la.
 
Voici la structure de mon war
 
/testfiles/updateprofille
/testfiles/pushcontent
/testfiles/....  
/WEB-INF/classes
WEB-INF/lib
 
le répertoire testfiles contient des fichier de tests
 
Voici le code que j'essaie d'exécuter ça sera plus clair:
 

Code :
  1. public InputStream getInpuStream(String fileName) throws Exception{
  2. if(session==null) throw new Exception("The httpsession is null" );
  3. ServletContext context=session.getServletContext();
  4. if(context==null)  throw new Exception("The servlet context is null" );
  5. InputStream stream=context.getResourceAsStream(PATH+"/"+fileName);
  6. //PATH=testfiles/updateprofile
  7. //le fichier que je veux lire est situé dans le war comme suit: /testfiles/updateprofile/myTestFile.xml
  8. if(stream==null) throw new ResourceAccessException("The specified resource is not available" );
  9. return stream.
  10. }
  11. Voici l'exception que j'obtiens
  12. ...
  13. java.io.FileNotFoundException: The httpsession is null
  14. ...


 
Merci d'avance


---------------
"Rendez tout aussi simple que possible mais ne simplifierez rien" Albert Einstein
n°1321120
axk47
Java Man vs Boolet Man
Posté le 08-03-2006 à 17:05:41  profilanswer
 

axk47 a écrit :

Merci benou pour cette piste.
Maintenant que je l'ai empruntée je suis confronté à un nouveau problème: comment initialiser les objets
config,session car elle sont à  null.  
Et je n'arrive donc pas à invoquer la méthode getServletContext sur ces objets la.
 
Voici la structure de mon war
 
/testfiles/updateprofille
/testfiles/pushcontent
/testfiles/....  
/WEB-INF/classes
WEB-INF/lib
 
le répertoire testfiles contient des fichier de tests
 
Voici le code que j'essaie d'exécuter ça sera plus clair:
 

Code :
  1. public InputStream getInpuStream(String fileName) throws Exception{
  2. if(session==null) throw new Exception("The httpsession is null" );
  3. ServletContext context=session.getServletContext();
  4. if(context==null)  throw new Exception("The servlet context is null" );
  5. InputStream stream=context.getResourceAsStream(PATH+"/"+fileName);
  6. //PATH=testfiles/updateprofile
  7. //le fichier que je veux lire est situé dans le war comme suit: /testfiles/updateprofile/myTestFile.xml
  8. if(stream==null) throw new ResourceAccessException("The specified resource is not available" );
  9. return stream.
  10. }
  11. Voici l'exception que j'obtiens
  12. ...
  13. java.io.FileNotFoundException: The httpsession is null
  14. ...


 
Merci d'avance


 
 
 
Personne n'a une idée????
 
Merci d'avance


---------------
"Rendez tout aussi simple que possible mais ne simplifierez rien" Albert Einstein

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java J2EE Servlet] récupérer des fichiers inclus dans un war

 

Sujets relatifs
[AXIS] java, php | Consommation d'un web serviceTests techniques en Java
[java] Parser un fichier XMLwebservice java et type complexe
Java sur Mac ?[BATCH] Lister les fichiers d'un dossier
[PHP&JAVASCRIPT] Probleme pour recuperer les variables d'un formulairejsp/servlet/web.xml
Programmer en JAVA. Avec quoi sous linux ?Entre SAP ou J2EE , koi choisir?
Plus de sujets relatifs à : [Java J2EE Servlet] récupérer des fichiers inclus dans un war


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR