IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

Appeler un service web depuis mon application Java


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 35
    Par défaut Appeler un service web depuis mon application Java
    Bonjour,

    actuellement sur un projet, je dois faire appel à un service web chargé d'envoyer des mails selon les informations que je lui donne. Mon application est codée en Java (pas de jsp/servlet) et j'ai la structure xml à envoyer au service web à l'aide la méthode post. Le problème est que je ne suis complètement débutant en ce qui concerne les services web et je ne trouve pas mon bonheur pour répondre à cette question: "Comment faire appel à lui en Java et comment lui envoyer les données en POST?".

    Si quelqu'un pouvait me donner une piste je le remercie beaucoup que je sache dans quelle direction partir, il m'enlèverait une belle épine du pied. Je suis biensûr disposé à répondre à vos qestions si vous en avez.

    Lord Yu

  2. #2
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 35
    Par défaut
    Après quelques recherches et avoir parlé à quelques personne j'ai cru comprendre que je devais générer du code à partir du wsdl à ma disposition. J'intègre ensuite ce code à mon projet et je pourrais "facilement" utiliser mon web service. C'est en tout cas se que font les personnes m'en ayant parlé mais dans d'autres langages...

    J'ai donc fait des recherches dans ce sens pour Java et à priori je peux utiliser l'outils Axis2 prévu à cet effet. J'ai donc été sur Apache - Axis2, j'ai téléchargé le plugins eclipse permettant cette génération et lorsque je veux générer mon code (clique sur "Finish"), j'ai le message d'erreur suivant:
    "an error occurred while completing process java.lang.reflect.invocationtargetexception"

    Quelqu'un l'a déjà eu et peu m'éclairer?
    Merci

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Par défaut
    hello,

    voici un excellent tuto: http://www.netbeans.org/kb/docs/websvc/jax-ws.html

  4. #4
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 35
    Par défaut
    Bonjour,

    Désolé Fleo0 mais même si ça m'a éclairci les idées sur certains points ce n'est pas vraiment se que je recherchais étant donné que je travaille sous éclipse et que le service web existe déjà, mais ça n'en était pas moins intéressant

    Donc j'y vois à présent un peu plus clair dans le service web et je pense pouvoir être plus précis dans mes questions.

    Donc il faut savoir que je fais ça dans le cadre d'un stage, le service web était déjà présent lors de mon arrivé, je doute qu'il ait été codé en Java/JSP et j'ai donc à ma disposition, en ligne, le MailServer.asmx?wsdl.

    J'ai donc essayé d'utiliser le plugin Axis2 for Eclipse pour générer une class java me permettant d'utiliser ce service mais j'avais une erreur, j'ai donc téléchargé l'outil Axis2 en stand alone et utilisé son outil wsdl2java pour générer le code client. Je vais maintenant l'intégrer à mon projet et essayer de l'utiliser.

    Suis-je sur la bonne voie pour utiliser le service web?

    Ai-je besoin de modifier quelque chose sur le serveur car j'ai vu qu'on peut générer du code serveur ("skeleton" je crois)? Je ne pense pas car le service est déjà utilisé mais pas par des applications Java.

    Merci de votre patience.

    Edit: En fait j'ai déjà un soucis pour l'intégrer à mon projet. J'ai donc mon projet dans éclipse et ma class java ici:
    C:\Documents and Settings\alexandre\Bureau\axis2-1.5-bin\axis2-1.5\Client\src\srcClient\MailServerStub.java

    Quand je l'ajoute à mon package .net par un simple glissé il ne connait pas les class de org.apache.axis2 et j'ai donc pas mal d'erreur. J'ai bien fait une tentative d'import du package mais sans succès, quelqu'un peut éclairer ma lanterne à ce sujet? Merci encore

    Edit2: J'ai réussi à importer les bons jar dans mon projet, il s'agissait de jar contenu dans le dossier lib de Axis2. Plus d'erreurs sur le projet donc, reste à trouver comment l'utiliser et quelles méthodes appeler dans cette class java quelque peu conséquente au niveau de la taille

  5. #5
    oca
    oca est déconnecté
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 354
    Par défaut
    Si tu dois "juste" appeler un service simple via soap/http, tu peux aussi le faire simplement de la façon suivante, sans framework :
    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
     
    import java.net.*;
    import java.io.*;
     
    public class SendSoap {
    	public static void main(String[] args) throws Exception {
    		String soapMessage = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:oca=\"http://oca\">"
    				+ " <soap:Header/>"
    				+ "  <soap:Body>"
    				+ " <oca:sayHello>"
    				+ "  <name>Olivier</name>"
    				+ " </oca:sayHello>"
    				+ "</soap:Body>" + "</soap:Envelope>";
     
    		String res = sendSOAP("http://localhost:6060/axis2/services/Service1", soapMessage);
    		System.out.println(res);
    	}
     
    	public static String sendSOAP(String SOAPUrl, String soapMessage)
    			throws Exception {
    		URL url = new URL(SOAPUrl);
    		URLConnection connection = url.openConnection();
    		HttpURLConnection httpConn = (HttpURLConnection) connection;
     
     
    		byte[] byteArray = soapMessage.getBytes("UTF-8");
     
    		httpConn.setRequestProperty("Content-Length", String
    				.valueOf(byteArray.length));
    		httpConn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
    		httpConn.setRequestProperty("SOAPAction", "");
    		httpConn.setRequestMethod("POST");
     
    		httpConn.setDoOutput(true);
    		httpConn.setDoInput(true);
     
    		OutputStream out = httpConn.getOutputStream();
    		out.write(byteArray);
    		out.close();
    		BufferedReader in = null;
    		StringBuffer resultMessage= new StringBuffer();
    		try {
    			InputStreamReader isr = new InputStreamReader(httpConn
    					.getInputStream());
    			in = new BufferedReader(isr);
    			String inputLine;
    			while ((inputLine = in.readLine()) != null) {
    				resultMessage.append(inputLine);
    			}
     
    		} finally {
    			if (in != null) {
    				in.close();
    			}
    		}
    		return resultMessage.toString();
    	}
    }
    Tu peux t'aider de soapUI ou d'eclipse pour générer la requête soap...

    A+

  6. #6
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 35
    Par défaut
    Cette solution m'a l'air cohérente et en plus de ça très facile à mettre en oeuvre... à première vu en tout cas.

    En effet je dois juste appeler un service via http en lui envoyant en paramètre la structure xml contenant le sujet du mail, le destinataire, l'expéditeur, le contenu du mail et sa priorité.

    Je n'ai pas trop bien compris pour ce qui est de générer une requête soap mais si j'ai bien compris c'est le fameux paramètre xml dont je parle plus haut (?).

    Donc j'ai remplacé le String soapMessage par ma structure xml de la forme suivante:
    <SendMail xmlns="http://nomDeDomaine.org">
    <mailToSend>
    <Address></Address>
    ...
    </mailToSend>
    </SendMail>
    Je ne sais pas comme je n'utilise pas vraiment soap si je dois laisser ça "httpConn.setRequestProperty("SOAPAction", "");" mais que je l'enlève ou non ne change rien.

    J'ai changé l'url de sendSoap par mon url qui est de la forme suivante (Je ne sais pas si une personne extérieure peut utiliser le service donc je ne met pas l'url entièrement):
    Au final je tombe sur une erreur 500:

    Exception in thread "main" java.io.IOException: Server returned HTTP response code: 500 for URL: http://www.nom_de_domaine.fr/MCCWebF...rver.asmx?wsdl
    at sun.net.http://www.protocol.http.HttpURLConn...Stream(Unknown Source)
    at org.apache.SendSoap.sendSOAP(SendSoap.java:50)
    at org.apache.SendSoap.main(SendSoap.java:21)
    J'ai pas l'impression de m'être trompé quelque part mais étant novice avec les service web et les requêtes http en java je préfère ne pas trop m'avancer.

    Merci beaucoup pour l'aide.

    Edit: si les accès au serveur sont restreins, peut être le firewall qui me bloque? Un moyen simple de le savoir?

  7. #7
    oca
    oca est déconnecté
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 354
    Par défaut
    On va y aller pas à pas...

    Est-ce que si tu tapes l'url de la wsdl (http://www.nom_de_domaine.fr/MCCWebF...rver.asmx?wsdl) dans un browser (IE ou Firefox par exemple), tu obtiens bien un contenu xml qui s'affiche ?

    Si non, on ne peut pas aller plus loin, il y a un problème de proxy ou de firewall ou un truc réseau / sécurité qui coince... si oui, on pourra passer à la suite...

    A+

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/01/2015, 16h12
  2. Envoyer un sms depuis mon application java
    Par zpico dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 05/02/2014, 17h11
  3. Ouvrir une page Web depuis mon application
    Par Lelio1407 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 17/12/2009, 12h09
  4. Réponses: 6
    Dernier message: 21/07/2006, 02h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo