Bonjour à tous,
Travaillant actuellement sur un projet de recherche, nous devons interagir avec une application web développée avec le standard JSF 1.2.
Afin d'invoquer une méthode particulière de cette application depuis l'extérieur de celle-ci, j'ai, grâce à l'information trouvée sur la page http://www.javaworld.com/javaworld/j...8-servlet.html, implémenté un programme Java que voici
Ce programme appelle en fait une servlet nommée "bem" qui réalise l'action désirée dans l'application web JSF. Ce programme fonctionne parfaitement bien et réalise ce qui est voulu.
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 import java.io.*; import java.net.*; import java.util.Scanner; public class ContactBemServlet { public static void main( String [] args ) { Scanner input = new Scanner(System.in); System.out.println("Please give the CaseID to suspend :"); String caseNbr = input.nextLine(); String arg = "caseID=" + caseNbr; System.out.println(arg); try { URL url = new URL("http://localhost:8080/monitorService/bem"); URLConnection conn = url.openConnection(); conn.setDoOutput(true); BufferedWriter out = new BufferedWriter( new OutputStreamWriter( conn.getOutputStream() ) ); out.write(arg); out.flush(); out.close(); BufferedReader in = new BufferedReader( new InputStreamReader( conn.getInputStream() ) ); String response; while ( (response = in.readLine()) != null ) { System.out.println( response ); } in.close(); } catch ( MalformedURLException ex ) {} catch ( IOException ex ) {} } }
Afin de pouvoir user de ce programme depuis ailleurs que ma machine, j'ai décidé de créer un service web JAX-WS à partir de celui-ci. Voici la classe d'implémentation de ce service :
J'ai placé différentes mises à jour de la String "response" afin de détecter d'éventuelles erreurs dans le déroulement du service. Quand j'appelle mon service web (via soapUI), je reçois comme réponse "toto" ce qui implique que le bloc "try" s'exécute bien. Pourtant, l'action devant être réalisée dans l'application web ne l'est pas.
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 @WebService(endpointInterface = "org.bem.ws.ContactBem") public class ContactBemImpl implements ContactBem { @Override public String CallBem(String caseID) { String response = "tete"; String param = "caseID=" + caseID; try { URL url = new URL("http://localhost:8080/monitorService/bem"); URLConnection conn = url.openConnection(); conn.setDoOutput(true); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream())); out.write(param); out.flush(); out.close(); //BufferedReader in = // new BufferedReader(new InputStreamReader(conn.getInputStream())); //while ((response = in.readLine()) != null) { // System.out.println(response); //} //in.close(); response = "toto"; } catch (MalformedURLException ex) { response = "titi"; } catch (IOException ex) { response = "tata"; } return (response); }
Ce service web est déployée sur le port 8084 d'un serveur Tomcat.
Étant débutant dans le domaine des services web (ce n'est que pour cette tâche particulière que je m'y suis mis), quelqu'un de plus expert que moi pourrait-il me dire ce qui ne va pas ? Est-ce l'un des méthodes utlisées dans CallBem qui n'est pas utilisable dans le cadre d'un service web ? Suis-je complètement à côté de la plaque ? Ce qui fonctionne en tant que simple programme Java ne fonctionne pas nécessairement une fois déployé dans un service web ?
D'avance merci
Gaby
Partager