Problème test Service Web avec hibernatemysql

Fermé
koko1986 - 31 déc. 2009 à 02:28
 koko1986 - 31 déc. 2009 à 03:10
Bonjour,

J'ai un petit soucis avec mon web service. En fait le build et le deploy fonctionne correctement mais lors du test du web service depuis le navigateur , ma méthode me retourne une liste vide tout le temps.

Mon fichier hibernate xml dans le package source est le suivant:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/agence</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">superkoko</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.current_session_context_class">thread</property>
<mapping resource="operation/ws/Vol.hbm.xml"/>
<mapping resource="operation/ws/Reservation.hbm.xml"/>
<mapping resource="operation/ws/Clients.hbm.xml"/>
</session-factory>
</hibernate-configuration>

le fichier de xml pour les mapping est correct et placé dans le package operation.ws .

ma méthode de service est :

@WebMethod(operationName = "recherche")
public Vol recherche(@WebParam(name = "depart")
String depart, @WebParam(name = "arrivee")
String arrivee) {
//TODO write your implementation code here:

VolHelper helper = new VolHelper();
System.out.println("voila");
Vol vol = helper.getVol(depart, arrivee);

return vol;
}

La methode getVol:

public Vol getVol(String depart, String arrivee) {
Vol vol = null;
List<Vol> volList = null;
try {
org.hibernate.Transaction tx = session.beginTransaction();
Query q = session.createQuery ("from Vol as vol where vol.depart='" + depart +"' and vol.arrivee='" + arrivee +"' " );
volList = (List<Vol>) q.list();
vol = (Vol) volList.get(0);
tx.commit();

} catch (Exception e) {
e.printStackTrace();
}
return vol;
}

Le "voila" s'affiche a la console, mais le soap response ne renvoie rien, pourtant, mysql lancé et j'ai fait le test avec une requête depuis la ligne de commande et il renvoie la table.

J'ai effectué un test aussi pour ajouter un élément dans la table, mais rien, ca retourne false.

J'ai placer un try-catch pour voir le soucis et j'ai l'affichage dans la console:


INFO: Loading application agenceOperation at /agenceOperation
INFO: agenceOperation was successfully deployed in 3 515 milliseconds.
INFO: Metro monitoring rootname successfully set to: amx:pp=/mon/server-mon[server],type=WSEndpoint,name=/agenceOperation-VolHelperWsService-VolHelperWsPort
INFO: parsing WSDL...

INFO: generating code...

INFO: compiling code...

INFO: Invoking wsimport with http://localhost:8080/agenceOperation/VolHelperWsService?WSDL
INFO: wsimport successful
INFO: parsing WSDL...

INFO: generating code...

INFO: compiling code...

INFO: Invoking wsimport with http://localhost:8080/agenceOperation/VolHelperWsService?WSDL
INFO: wsimport successful
INFO: voila
GRAVE: java.lang.NullPointerException
at operation.ws.VolHelper.getVol(VolHelper.java:28)
at operation.ws.VolHelperWs.recherche(VolHelperWs.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.glassfish.webservices.InstanceResolverImpl$1.invoke(InstanceResolverImpl.java:137)
at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146)
at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257)
at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:95)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470)
at com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112)
at org.glassfish.webservices.MonitoringPipe.process(MonitoringPipe.java:138)
at com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470)
at com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112)
at com.sun.enterprise.security.webservices.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:195)
at com.sun.enterprise.security.webservices.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java:127)
at com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470)
at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:295)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:515)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:285)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:143)
at org.glassfish.webservices.JAXWSServlet.doPost(JAXWSServlet.java:147)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:619)


Est ce qu'il est possible de m'expliquer le problème et comment le résoudre ? SVP.

Merci. et Bonne fin d'année.
A voir également:

2 réponses

arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
31 déc. 2009 à 02:32
Vérifie lequel de tes objets dans le code suivant est nul :

public Vol getVol(String depart, String arrivee) {
Vol vol = null;
List<Vol> volList = null;
try {
org.hibernate.Transaction tx = session.beginTransaction();
Query q = session.createQuery ("from Vol as vol where vol.depart='" + depart +"' and vol.arrivee='" + arrivee +"' " );
volList = (List<Vol>) q.list();
vol = (Vol) volList.get(0);
tx.commit();

} catch (Exception e) {
e.printStackTrace();
}
return vol;
}

Place un test avant chaque utilisation, ainsi tu verras d'où sort le NullPointer.
0
Bonsoir,

Enfait,dans la console, j'ai comme indiqué que le problème vient de la ligne 28 du fichier java qui correspond a :
org.hibernate.Transaction tx = session.beginTransaction();

Parcontre, j'ai fait comme vous avez proposez et je suis sure qu'il ne rentre pas dans le Try, du coup il retourne la liste vide qui a été initialisé au début.

public Vol getVol(String depart, String arrivee) {
Vol vol = null;
List<Vol> volList = null;
try {
org.hibernate.Transaction tx = session.beginTransaction();
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
31 déc. 2009 à 02:55
Si il y rentre, mais justement il passe au catch puisqu'il rencontre un NullPointerException.

M'est d'avis que "session" est Null, et donc qu'aucune session ou connexion n'est ouverte.
0
Je pense que la session n'est pas null, puisque je lance une commande Hql et ca me retourne la table:

Mon HibernateUtil.java est le suivant:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package operation.ws;


import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;

/**
* Hibernate Utility class with a convenient method to get Session Factory object.
*
* @author bessa
*/
public class HibernateUtil {
private static final SessionFactory sessionFactory;

static {
try {
// Create the SessionFactory from standard (hibernate.cfg.xml)
// config file.
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Log the exception.
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}

j'ai essayé de placé direcctement l'initialisation de la session dans la methode getVol() dans le le bloc "try" au lieu de la laisser dans le constructeur volHelper mais ca marche pas.
0