Bonjour tout le monde,
Alors avant de parler directement de mon problème je vais vous parler un peu de ce que j'essaye de faire. Donc voilà j'ai essayé de créer un web service qui va dans une base de donnée oracle (j'utilise oracle 11g express edition) et qui fait une recherche sur base de deux éléments. Pour m'exercer j'ai fait un truc tout simple, j'ai une table de user et je fais une recherche sur eux soit avec leur id, soit leur nom, ou les deux (un seul résultat possible).
Cette partie là j'ai réussi à la faire et je vous montre donc le résultat avec soapUI (voir pièce jointe soapUI)
Donc à partir d'ici on voit que mon web service fonctionne comme je le souhaite. Une fois que ça a été fait j'ai généré mon client "automatiquement" avec les fonctionnalités d'eclipse à partir du web service crée. Il me définit lui même plusieurs classes et tout ce qui va avec. Ici j'ai la classe représentant mon Client.java
Donc ici à la base je n'ai rien modifié, ou presque en fait j'ai juste changé les éléments compris dans _newOperation_parameters.setNomUserRech("");
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 package org.example.wsdlbjo3; /** * Please modify this class to meet your needs * This class is not complete */ import java.io.File; import java.net.MalformedURLException; import java.net.URL; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.namespace.QName; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.xml.bind.annotation.XmlSeeAlso; /** * This class was generated by Apache CXF 2.7.3 * 2013-03-08T14:14:00.788+01:00 * Generated source version: 2.7.3 * */ public final class WSDLBJO3_WSDLBJO3SOAP_Client { private static final QName SERVICE_NAME = new QName("http://www.example.org/WSDLBJO3/", "WSDLBJO3"); private WSDLBJO3_WSDLBJO3SOAP_Client() { } public static void main(String args[]) throws java.lang.Exception { HttpServletRequest request = null; HttpServletResponse response = null; URL wsdlURL = WSDLBJO3_Service.WSDL_LOCATION; if (args.length > 0 && args[0] != null && !"".equals(args[0])) { File wsdlFile = new File(args[0]); try { if (wsdlFile.exists()) { wsdlURL = wsdlFile.toURI().toURL(); } else { wsdlURL = new URL(args[0]); } } catch (MalformedURLException e) { e.printStackTrace(); } } WSDLBJO3_Service ss = new WSDLBJO3_Service(wsdlURL, SERVICE_NAME); WSDLBJO3 port = ss.getWSDLBJO3SOAP(); { System.out.println("Invoking newOperation..."); org.example.wsdlbjo3.GetUser _newOperation_parameters = new org.example.wsdlbjo3.GetUser(); //org.example.wsdlbjo3.CreationRecherche recherche = new org.example.wsdlbjo3.CreationRecherche(); // recherche.doGet(request, response, port); _newOperation_parameters.setIdUser1Rech(4); _newOperation_parameters.setNomUserRech(""); org.example.wsdlbjo3.GetUserResponse _newOperation__return = port.newOperation(_newOperation_parameters); System.out.println("Nom de l'utilisateur: "+_newOperation__return.getNomUser()); System.out.println("Id de l'utilisateur: " +_newOperation__return.getIdUser1()); // getServletContext().getRequestDispatcher( "/afficherClient.jsp" ).forward( request, response ); System.out.println("newOperation.result=" + _newOperation__return); } System.exit(0); } }
Donc en gros ici d'après ce que je comprends dans ces éléments on met de nouveaux paramètres de recherche (étant définit de typeorg.example.wsdlbjo3.GetUser ), ici je vais faire ma recherche seulement à partir de l'id d'un user.
ensuite sur cette ligne:
org.example.wsdlbjo3.GetUserResponse _newOperation__return = port.newOperation(_newOperation_parameters);
on voit que je passe mes éléments, et qu'il va faire ma recherche avec le web service crée.
Donc ici je fais un test pour voir si je comprends bien la logique derrière tout ça et si il n'y a rien qui cloche et voilà ce que j'obtiens (voir pièce jointe console)
Donc voilà bingo tout fonctionne comme je le voulais. Maintenant voilà j'en arrive à mon problème. Il faut que j'arrive à afficher mes résultats sous forme d'une application web.
Alors ici j'ai ma page jsp ou je dois entrer les info à chercher
ici ce sera l'affichage de mon résultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 <%@ page pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Création d'une recherche</title> <link type="text/css" rel="stylesheet" href="inc/style.css" /> </head> <body> <div> <form method="post" action="CreationRecherche"> <fieldset> <legend>Informations recherchées</legend> <label for="idUser">Id </label> <input type="number" id="idUser" name="idUser" value="" size="20" maxlength="20" /> <br /> <label for="nomUser">Nom</label> <input type="text" id="nomUser" name="nomUser" value="" size="20" maxlength="20" /> <br /> </fieldset> <input type="submit" value="Valider" /> <input type="reset" value="Remettre à zéro" /> <br /> </form> </div> </body> </html>
Ma servlet CreationRecherche.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <%@ page pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Affichage d'un User</title> <link type="text/css" rel="stylesheet" href="inc/style.css" /> </head> <body> <%-- Affichage des données --%> <p>Id : ${ User1.idUser1 }</p> <p>Nom : ${ User1.nom }</p> </body> </html>
ici, dans ma servlet, je récupère mes élément avec le request.getParam, et ensuite je les met dans mon _newOperation_parameters que je vais ensuite passer à mon web service :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 package org.example.wsdlbjo3; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CreationRecherche extends HttpServlet { org.example.wsdlbjo3.GetUser _newOperation_parameters = new org.example.wsdlbjo3.GetUser(); WSDLBJO3 port; public void doPost( HttpServletRequest request, HttpServletResponse response, WSDLBJO3 port) throws ServletException, IOException { String idUser = request.getParameter("idUser"); System.out.println("toto est en vacance"); String nomUser = request.getParameter("nomUser"); _newOperation_parameters.setIdUser1Rech(Integer.parseInt(idUser)); _newOperation_parameters.setNomUserRech(nomUser); org.example.wsdlbjo3.GetUserResponse _newOperation__return = port.newOperation(_newOperation_parameters); User1 user1= new User1(); user1.setIdUser1( _newOperation__return.getIdUser1() ); user1.setNom( _newOperation__return.getNomUser() ); user1.setPrenom( "null" ); user1.setLogin( "null" ); user1.setPwd( "null" ); user1.setMail( "null" ); user1.setTel( "null" ); user1.setService( "null" ); user1.setApplicationName( "null" ); /* Ajout du bean et du message à l'objet requête */ request.setAttribute( "user1", user1 ); RequestDispatcher rd = request.getRequestDispatcher("/afficherRecherche.jsp"); rd.forward(request, response); // getServletContext().getRequestDispatcher( "/afficherRecherche.jsp" ).forward( request, response ); } public void doGet( HttpServletRequest request, HttpServletResponse response, WSDLBJO3 port) throws ServletException, IOException { // getServletContext().getRequestDispatcher( "/afficherRecherche.jsp" ).forward( request, response ); response.sendRedirect(request.getServletContext().getContextPath()+ "/afficherRecherche.jsp" ); } }
org.example.wsdlbjo3.GetUserResponse _newOperation__return = port.newOperation(_newOperation_parameters);
Vu que ça a fonctionné avant j'essaye de reproduire + ou - la même logique ^^' ... sans grande conviction XD
Seulement voilà pour tout mettre dans ma servlet j'ai du pas mal adapter mon client.java notamment avec le port.newOperation.
car oui le port est défini dans mon client et donc je me suis dis que j'allais passer l'élément dans ma méthode et que ça devrait aller (ou pas x'D)
et donc voilà ce que donne maintenant mon client .java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 package org.example.wsdlbjo3; /** * Please modify this class to meet your needs * This class is not complete */ import java.io.File; import java.net.MalformedURLException; import java.net.URL; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.namespace.QName; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.xml.bind.annotation.XmlSeeAlso; /** * This class was generated by Apache CXF 2.7.3 * 2013-03-08T14:14:00.788+01:00 * Generated source version: 2.7.3 * */ public final class WSDLBJO3_WSDLBJO3SOAP_Client { private static final QName SERVICE_NAME = new QName("http://www.example.org/WSDLBJO3/", "WSDLBJO3"); private WSDLBJO3_WSDLBJO3SOAP_Client() { } public static void main(String args[]) throws java.lang.Exception { HttpServletRequest request = null; HttpServletResponse response = null; URL wsdlURL = WSDLBJO3_Service.WSDL_LOCATION; if (args.length > 0 && args[0] != null && !"".equals(args[0])) { File wsdlFile = new File(args[0]); try { if (wsdlFile.exists()) { wsdlURL = wsdlFile.toURI().toURL(); } else { wsdlURL = new URL(args[0]); } } catch (MalformedURLException e) { e.printStackTrace(); } } WSDLBJO3_Service ss = new WSDLBJO3_Service(wsdlURL, SERVICE_NAME); WSDLBJO3 port = ss.getWSDLBJO3SOAP(); { System.out.println("Invoking newOperation..."); org.example.wsdlbjo3.GetUser _newOperation_parameters = new org.example.wsdlbjo3.GetUser(); org.example.wsdlbjo3.CreationRecherche recherche = new org.example.wsdlbjo3.CreationRecherche(); recherche.doGet(request, response, port); // _newOperation_parameters.setIdUser1Rech(4); //_newOperation_parameters.setNomUserRech(""); //org.example.wsdlbjo3.GetUserResponse _newOperation__return = port.newOperation(_newOperation_parameters); //System.out.println("Nom de l'utilisateur: "+_newOperation__return.getNomUser()); //System.out.println("Id de l'utilisateur: " +_newOperation__return.getIdUser1()); // getServletContext().getRequestDispatcher( "/afficherClient.jsp" ).forward( request, response ); //System.out.println("newOperation.result=" + _newOperation__return); } System.exit(0); } }
après je crée mon User, et j'essaye de le passer dans ma page afficher recherche :
request.setAttribute( "user1", user1 );
RequestDispatcher rd = request.getRequestDispatcher("/afficherRecherche.jsp");
rd.forward(request, response);
et pour finir voici mon web.xml
et donc voilà quand je lance creerRecherche, que je met mes éléments et que je valide ça donne ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>CreationRecherche</servlet-name> <servlet-class>org.example.wsdlbjo3.CreationRecherche</servlet-class> </servlet> <servlet-mapping> <servlet-name>CreationRecherche</servlet-name> <url-pattern>/CreationRecherche</url-pattern> </servlet-mapping> </web-app>
Etat HTTP 405 - La méthode HTTP POST n''est pas supportée par cette URL
La méthode HTTP POST n''est pas supportée par cette URL
La méthode HTTP spécifiée n''est pas autorisée pour la ressource demandée.
Donc voilà un peu ou j'en suis. Si quelqu'un pourrait m'aider ce serait vraiment cool car là je m'arrache les cheveux de la tête =/
Je pense que ma logique est plus ou - bonne mais c'est juste la mise en forme, structure qui doit merder, quand je vois ça jme dis que j'ai vraiment crée un monstre XD
Enfin voilà si vous avez besoin d'informations supplémentaires n'hésitez pas ^^
Partager