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

  FORUM HardWare.fr
  Programmation
  Java

  InvocationTargetException dans un servlet.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

InvocationTargetException dans un servlet.

n°1409132
Titelf
Posté le 19-07-2006 à 09:49:34  profilanswer
 

Bonjour, je suis en train de développer une application Web en JAVA. Dans mon servlet, j'utilise une classe UsinePriorite censée me créer, au moyen de la méthode create(String), un objet implémentant l'interface PrioriteIfc. La méthode create(String) a été testée et fonctionne (argument null ou non).
 
Le problème, c'est que lorsque j'appelle mon servlet depuis le navigateur, il me lance une InvocationTargetException lorsqu'il essaie de lancer la fonction create, pourtant, je lui pas bien un objet de classe String. Si quelqu'un avait une idée de pourquoi ça me lance cette exception, je suis preneur ... Voici le code source de ma servlet (en tout cas des parties utiles ...) :
 
La partie initialisation ...

Code :
  1. public class ServletHelpdesk extends HttpServlet{
  2. // Attributs
  3. private Connection con;
  4. private UsinePrioriteIfc usnPrio;
  5. public void init(){
  6. try {
  7.  // On initialise le driver, puis on récupère la connexion  
  8.  Class.forName("net.sourceforge.jtds.jdbc.Driver" );
  9.  Connection con=DriverManager.getConnection("jdbc:jtds:sqlserver://localhost","esclauger","esclauger" );
  10.  // On initialise toutes les usines
  11.  this.usnPrio=new UsinePriorite(this.con);
  12. } catch (ClassNotFoundException e) {
  13.  this.destroy();
  14. } catch (SQLException e){
  15.  this.destroy();
  16. }
  17. }


 
et là ou est appelée la fonction (la méthode est public pour des raisons de j'avais pas envie de me casser les c**** car elle est invoquée grace à un système utilisant la reflexivité...

Code :
  1. public void ajtPrio(HttpServletRequest req, HttpServletResponse rep) throws ServletException{
  2.  String desc = req.getParameter("description" );
  3.  if (desc != null) {
  4.   try {
  5.    System.out.println("Creation d'une priorité" );
  6.    PrioriteIfc p = this.usnPrio.create("Urgent" );
  7.    System.out.println(p);
  8.    req.setAttribute("created",p);
  9.    System.out.println("Ca va charger le JSP" );
  10.    this.getServletContext().getRequestDispatcher("/views/ajtPrioSucces.jsp" ).forward(req,rep);
  11.   }
  12. ...


La méthode ajtPrio se lance bien comme il faut depuis doGet et doPost quand il n'y a pas de paramètre "description" dans la requête, mais dès que celui ci est présent, ça plante à la ligne "PrioriteIfc p = this.usnPrio.create("Urgent" );".

mood
Publicité
Posté le 19-07-2006 à 09:49:34  profilanswer
 

n°1409138
brisssou
8-/
Posté le 19-07-2006 à 09:58:07  profilanswer
 

stackTrace ?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°1409152
Titelf
Posté le 19-07-2006 à 10:16:18  profilanswer
 

En fait le log me coupait une partie de la stack trace (je changeait les types d'exceptions en les faisant remonter). Quand je fais un printStackTrace dans la servlet, j'obtiens  

Code :
  1. java.lang.NullPointerException
  2. at presentation.ServletHelpdesk.ajtPrio(ServletHelpdesk.java:86)
  3. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  4. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  5. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  6. at java.lang.reflect.Method.invoke(Method.java:324)
  7. at presentation.ServletHelpdesk.doGet(ServletHelpdesk.java:136)
  8. at presentation.ServletHelpdesk.doPost(ServletHelpdesk.java:162)
  9. at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
  10. at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
  11. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
  12. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
  13. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
  14. at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
  15. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
  16. at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
  17. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
  18. at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
  19. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
  20. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
  21. at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
  22. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
  23. at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
  24. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
  25. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  26. at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
  27. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
  28. at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
  29. at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
  30. at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
  31. at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
  32. at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
  33. at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
  34. at java.lang.Thread.run(Thread.java:534)


 
En gros si je comprend bien, il me dit que mon objet usnPrio est null, c'est ça ?
 
[edit] Et c'est bien ça, je teste juste avant si this.usnPrio est null et il l'est ... comment ce fesse ? je croyais l'avoir initialisé dans ma fonction init(), et ce définitivement ...[/edit]


Message édité par Titelf le 19-07-2006 à 10:20:50
n°1409176
brisssou
8-/
Posté le 19-07-2006 à 10:31:28  profilanswer
 

c'est un peu dégueux ton archi, soit dit sans t'offenser...
 
regarde du coté du MVC, et améliore tout ça...
 
sinon, pour ton init, essaye de changer la signature, ça mange pas de pain, même si je doute que ça soit utile :

Code :
  1. public void init() throws ServletException {


 
es-tu sûr de passer dedant ? (ça serai étrange que non)


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°1409201
Titelf
Posté le 19-07-2006 à 10:46:37  profilanswer
 

Pour l'archi, je conçoit que ça a l'air un peu laid comme ça, mais je croyais faire du MVC ... la servlet effectue les actions, puis passe les données aux vues (en JSP) en modifiant un modèle (request) ...  
 
Sinon au niveau du init, j'y ai collé un System.out.println dedans (je dois donc trouver ce que je souhaite écrire dans sdout.txt dans le répertoir log de tomcat ...) et ça n'affiche rien ... si tu as une autre solution pour me permettre de vérifier que la fonction init est bien lancée, je suis preneur ...

n°1409205
brisssou
8-/
Posté le 19-07-2006 à 10:49:23  profilanswer
 

Citation :

Pour l'archi, je conçoit que ça a l'air un peu laid comme ça, mais je croyais faire du MVC ... la servlet effectue les actions, puis passe les données aux vues (en JSP) en modifiant un modèle (request) ...  

désolé, mais lol :)
 
tu as déclaré ta servlet dans web.xml ?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°1409218
Titelf
Posté le 19-07-2006 à 10:57:08  profilanswer
 

ouaip, elle est bien déclarée dans web.xml ...
 
Sinon, pourquoi lol ?

n°1409226
brisssou
8-/
Posté le 19-07-2006 à 11:01:09  profilanswer
 

devine


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°1409245
Titelf
Posté le 19-07-2006 à 11:11:29  profilanswer
 

Okay, j'avais lu des trucs sur MVC, mais j'avais mal compris apparament ... sinon, une idée de pourquoi c'est null (ou de comment je peux voir si je passe dans l'init ou pas ...)

n°1409253
brisssou
8-/
Posté le 19-07-2006 à 11:14:22  profilanswer
 

met pas de variable dans ta servlet, et plus de problème :)
 
au pire, fait la transiter dans la request, pour tester, parce que c'est dégueux hien.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
mood
Publicité
Posté le 19-07-2006 à 11:14:22  profilanswer
 

n°1409788
sebi
Posté le 19-07-2006 à 22:16:49  profilanswer
 

ouais ca merde forcement au niveau de l'init car ton objet usnPrio est null ... T'as une stacktrace quand tu démarres ton conteneur ? ya pas moyen que tu cales un breakpoint dans init ?  
 

n°1409835
benou
Posté le 20-07-2006 à 00:24:56  profilanswer
 

brisssou a écrit :

Citation :

Pour l'archi, je conçoit que ça a l'air un peu laid comme ça, mais je croyais faire du MVC ... la servlet effectue les actions, puis passe les données aux vues (en JSP) en modifiant un modèle (request) ...  

désolé, mais lol :)


l'mportant pour des applis web c'est de séparer la vue du modèle-controlleur. c'est ce qu'il fait, et c'est déjà pas mal ...
 

Titelf a écrit :

Okay, j'avais lu des trucs sur MVC, mais j'avais mal compris apparament ... sinon, une idée de pourquoi c'est null (ou de comment je peux voir si je passe dans l'init ou pas ...)


non.
c'est surement que tu lui affecte la valeur null ailleur dans ta servlet. ou bien que tu as également une méthode ini avec en argument un ServletContext (dans ce cas, c'est celle là qui sera appelée, et pas la init sans argument)

n°1409881
brisssou
8-/
Posté le 20-07-2006 à 07:59:32  profilanswer
 

c'est le fait d'appeller Model la request http, ça me semblait un peu exagéré.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°1409889
Titelf
Posté le 20-07-2006 à 08:20:30  profilanswer
 

@sebi2706> J'ai été voir dans les divers fichiers de logs du serveur Tomcat, a part "Rechargement de ce contexte", j'ai pas grand chose qui m'indique qu'il initialise mon conteneur. J'ai essayé de mettre des println() dans le init, mais ça veut pas marcher. Pour ce qui est des breakpoints, tu pensais à quoi ?
 
J'ai finalement fini par ne plus mettre de variables dans ma servlet, mais ça me fait un peu ch*** d'initialiser une connexion à la base de données chaque fois que je lance une fonction, je pensais pouvoir le faire une fois pour toute (voire gérer un pool de connexion pour être plus efficace)...

n°1409890
brisssou
8-/
Posté le 20-07-2006 à 08:23:06  profilanswer
 

pour les breakpoints, il pensait juste à en mettre je crois  :)  Dans le init, ça semble judicieux, puisque c'est là qu'on est pas sûr de passer...

 

edit : le reste du message, c'était de la merde...

Message cité 1 fois
Message édité par brisssou le 20-07-2006 à 08:53:30

---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°1409897
benou
Posté le 20-07-2006 à 08:47:34  profilanswer
 

brisssou a écrit :


Et même si tu gères un pool de connexions, je crois pas dire de conneries en disant que la connexion sera fermée à chaque fin de requête à la servlet... si ?


ben si. c'est le but d'un pool de connection de garder des connections ouvertes ...


Message édité par benou le 20-07-2006 à 08:48:07
n°1409899
brisssou
8-/
Posté le 20-07-2006 à 08:49:37  profilanswer
 

en le disant j'me suis rendu compte que je disais une connerie


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris

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

  InvocationTargetException dans un servlet.

 

Sujets relatifs
Trouver Fichier dans les Servlet.[oracle][servlet][xml] classdefnotfound sans raison
Méthodes d'une servlet.envoyer une varible jsp dans un servlet et récupérer la valeur envoyée
[servlet] générer une auth HTTP ?Compiler servlet en .class
Servlet Java[JSP/Servlet] Comment envoyer une string sans passer par des javabean
Comment compiler un .Java (servlet) dans un projet Tomcat ?ma servlet ne catch pas une exception lancée par mon EJB
Plus de sujets relatifs à : InvocationTargetException dans un servlet.


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