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):
Je l'ai placée dans un @NamedQuery de Pilote.java (JPA). Je ne sais pas si j'ai bien fais.
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;
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 :. mais quand je teste la méthode via le Web Service, j'obtiens une jolie exception :
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(); }2-Service invocation threw an exception with message : null; Refer to the server log for more details
Exceptions details : java.lang.reflect.InvocationTargetException
. 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
Partager