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 :

Récupération du contenu du message SOAP


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 142
    Par défaut Récupération du contenu du message SOAP
    Bonjour, je voudrais savoir s'il était possible de récupérer le contenu de mon message SOAP à l'intérieur de mon programme (en java) ?

    Si oui, comment ?

    J'utilise la pile CXF pour développer mes Web Services. L'objectif est d'enregistrer dans des fichiers le contenu de ces messages SOAP afin de conserver une trace de l'activité des Web Services.

    Merci de votre aide !

  2. #2
    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
    Oui, c'est possible.

    La manière de faire dépends de si tu veux respecter la norme JAX-WS ou non.

    si tu passe directement par CXF, tu peux utiliser des interceptors(sur le serveur et/ou sur le client). il y en a deux types, les "in" et les "out"

    Exemple pour le côté Serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    // Create our Server
    ServerFactoryBean svrFactory = new ServerFactoryBean();
    svrFactory.setServiceClass(IService.class);
    svrFactory.setAddress("http://localhost:9083/test");
    svrFactory.setServiceBean(serviceImpl);
    svrFactory.getInInterceptors().add(new LoggingInInterceptor());
    svrFactory.getOutInterceptors().add(new LoggingOutInterceptor());
    svrFactory.create();
    ...
    Côté client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
    factory.setServiceClass(IService.class);
    factory.setAddress("http://localhost:8000/test");
    factory.getInInterceptors().add(new LoggingInInterceptor());
    factory.getOutInterceptors().add(new LoggingInInterceptor());
    IService client = (IService) factory.create();
    System.out.println(client.sayHello("Hello", "Oliiiccc"));
    ...
    Tu peux bien sur écrire ton propre interceptor qui doit alors implémenter l'interface "PhaseInterceptor"

    Si tu utilises JAX-WS, le principe est le même, et l'api decrit les annotations à utiliser pour ajouter les handlers. il y a un bon article ici :

    http://www.javaworld.com/javaworld/j...er.html?page=2

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 142
    Par défaut
    Merci pour ta réponse

    J'ai cependant omis de préciser que mon Web service est déployé sur un serveur (tomcat) dans une application web. D'ailleur je précise que j'en ai besoin coté serveur.

    De ce fait, Je pense que la méthode doit être différente ....

    Sinon je précise bien que je veux pouvoir récupérer ce message dans une String ... Comment faire en sorte de pouvoir utiliser ces interceptors afin de récupérer la String correspondant au message SOAP ?

  4. #4
    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
    tu peux configurer tes interceptors dans un fichier xml pour ton serveur.
    Je pense que tu devras écrire ton porpre interceptor pour mettre le message
    dans une string
    http://cwiki.apache.org/CXF20DOC/interceptors.html

    A+

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 142
    Par défaut
    merci pour le lien !

    si j'ai bien compris. On a des interceptors. Si l'on se situe coté serveur on a un incoming chain à l'invocation du Web service et un outgoing chain lors de l'envoi du message SOAP de réponse. Ce sont ces chaines que je veux récupérer.

    Les interceptorchain sont divisés en phases. a premiere vue, je devrai pouvoir récupérer le message SOAP en entrée à la phase : RECEIVE. Et en sortie, à la phase SEND


    Mes classes interceptor devant me permettre de récupérer le message SOAP devrait ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MyIncomingInterceptor extends AbstractSoapInterceptor {
      public MyIncomingInterceptor () {
        super(Phase.RECEIVE);
      }
      ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MyOutgoingInterceptor extends AbstractSoapInterceptor {
      public MyOutgoingInterceptor () {
        super(Phase.SEND);
      }
      ...
    }
    Je dispose donc de 2 classes qui seraient appeler lors de l'invocation du Web Service et lors de l'envoi de la réponse. (grace a la configuration dans le fichier xml (services.xml)

    Ce que je ne comprend pas c'est comment à partir de ça récupérer le message SOAP ? En effet, on dispose du constructeur; d'une méthode handleMessage ayant comme paramètre un message SOAP et d'une méthode handleFault ayant comme paramètre un message.

    Il me faudrait quelque chose du genre : getSoapMessage() retournant le SoapMessage intercepté, non ?


  6. #6
    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
    Je ne sais pas exactement comment on récupère le SOAP, mais c'est possible...(car le LogginInterceptor est basé sur le même principe et il y arrive...)

    Le truc c'est qu'il faut caster le message en un autre type genre SOAPMessage
    (car les web service permettent d'autre binding que soap, c'est pour cela que le handler utilise un type Message qui est générique)

    Essaie dejà de faire un message.getClass().getName() pour voir quelle est la classe concrète que tu reçois.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SOAP Proxy] outil pour tester le contenu XML des message SOAP
    Par evan.caballero dans le forum Services Web
    Réponses: 3
    Dernier message: 26/01/2010, 20h57
  2. Récupération du contenu d'un page avec SYS.UTL_HTTP
    Par squalito dans le forum Oracle
    Réponses: 1
    Dernier message: 09/10/2005, 06h57
  3. [castor][SOAP] Probleme avec la validation du message SOAP
    Par VinceFromBcn dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 05/09/2005, 14h12
  4. la récupération du contenu en pl/sql
    Par squalito dans le forum PL/SQL
    Réponses: 4
    Dernier message: 25/01/2005, 17h25

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