Bonjour à tous,

J'apprends à développer des Web Services. Je suis parvenu à en faire en piochant les données d'une seule table, et maintenant, je souhaite piocher dans plusieurs tables à la fois.

J'ai 3 tables :
- [pilote] : idx, name, nationality, age, sexe
- [circuit] : idx, name, country, city, length
- [victoire] : pilote_idx, circuit_idx, runDate, runPlace, runTime
(souligné: primary key)

J'ai 4 classes dans la couche JPA:
- Pilote.java
- Circuit.java
- Victoire.java
- VictoirePK.java
et 6 dans la couche EJB:
- PiloteFacade.java + PiloteFacadeLocal.java
- CircuitFacade.java + CircuitFacadeLocal.java
- VictoireFacade.java + VictoireFacadeLocal.java

Voilà, jusque là, tout a été généré automatiquement.

Je souhaite créer un WebService qui me retourne la liste des pilotes avec le nombre de fois qu'ils ont terminé à la première place (donc récupération des "0 fois" aussi).
Voici ma requête (testée et fonctionnelle sous MySQL):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
SELECT p.name, Count(v.pilote_idx) nb
FROM pilote p
LEFT OUTER JOIN victoire v
ON p.idx = v.pilote_idx AND v.place = 1
GROUP BY p.name
ORDER BY nb DESC, p.name ASC;
Je l'ai placée dans un @NamedQuery de Pilote.java (JPA). Je ne sais pas si j'ai bien fais.

Mais avec tout ça, je ne sais pas quoi faire pour faire fonctionner mon WebService. Voici ce que j'ai tenté :
1-
. créer une classe [DevClass] : name, nbVictories
. dans PiloteFacade(Local), ajouter la méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
public List<DevClass> getVictories() {
return em.createQuery("MA_REQUETE_CI_DESSUS").getResultList();
}
. mais quand je teste la méthode via le Web Service, j'obtiens une jolie exception :
Service invocation threw an exception with message : null; Refer to the server log for more details
Exceptions details : java.lang.reflect.InvocationTargetException
2-
. en essayant de rajouter @ManyToOne en suivant ce tuto ou celui-ci, soit j'obtiens la même erreur, soit mon serveur plante (impossible d'undeploy, de lancer un WS, ou autre si je ne redémarre pas GlassFish).


Voilà, je sèche un peu.
Quelqu'un saurait-il m'aiguiller?


Merci d'avance...

ps: pour les plus courageux :
Service invocation threw an exception with message : null; Refer to the server log for more details

Exceptions details : java.lang.reflect.InvocationTargetException
javax.servlet.ServletException: java.lang.reflect.InvocationTargetException at com.sun.enterprise.webservice.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:345) at com.sun.enterprise.webservice.monitoring.WebServiceTesterServlet.invoke(WebServiceTesterServlet.java:121) at com.sun.enterprise.webservice.JAXWSServlet.doPost(JAXWSServlet.java:166) at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:315) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94) at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:288) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:647) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:579) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214) at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265) at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106) Caused by: java.lang.reflect.InvocationTargetException 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 com.sun.enterprise.webservice.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:316) ... 31 more Caused by: javax.xml.ws.soap.SOAPFaultException: javax.ejb.EJBException at com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:188) at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:108) at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119) at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89) at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:118) at $Proxy171.getWons(Unknown Source) ... 36 more