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 :

CXF Interceptor SoapMessage


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut CXF Interceptor SoapMessage
    Sur une appli web utilisant CXF et Spring, j'essaye de placer un interceptor dans le but de pouvoir récupérer les informations du header.

    Placer un interceptor ne pose pas vraiment de problèmes et récupérer le message soap non plus.

    Le seul souci c'est que je ne parviens pas à interpréter la classe SoapMessage afin d'accéder aux infos contenues dans le header.
    C'est à dire dans cette exemple le paramètre userName
    Sauriez vous me dire comment interpréter ce message dans la méthode handleMessage.


    Voici le message soap envoyé :
    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
     
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:spr="http://springtest.***.com/">
       <soapenv:Header>
     
             <userName>John Doe</userName>
     
       </soapenv:Header>
       <soapenv:Body>
          <spr:oneMethod>
             <!--Optional:-->
             <arg0>10</arg0>
             <!--Optional:-->
             <arg1>20</arg1>
          </spr:oneMethod>
       </soapenv:Body>
    </soapenv:Envelope>
    Puis la classe interceptor:
    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
     
    public class TestInterceptor extends AbstractSoapInterceptor{
    	String userConnected="";
     
    	  public TestInterceptor() {
    		    super(Phase.READ);
    		  }
     
     
    	@Override
    	public void handleMessage(SoapMessage message) {
    		System.out.println("interceptor");
     
    		List<Header> headers=message.getHeaders();
     
    		for (Header header:headers){
    			System.out.println("name : " +  header.getName());
    		}
     
     
    	}
     
    }
    Enfin la configuration Spring de l'interceptor

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	<bean id="testInterceptor" class="com.***.springtest.TestInterceptor"/>
     
        <!-- We are adding the interceptors to the bus as we will have only one endpoint/service/bus. -->
     
        <bean id="cxf" class="org.apache.cxf.bus.CXFBusImpl">
            <property name="inInterceptors">
                <ref bean="testInterceptor"/>
            </property>
            <property name="outInterceptors">
                <ref bean="testInterceptor"/>
            </property>
        </bean>

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2008
    Messages : 14
    Par défaut
    Salut à toi,

    Je me pose actuellement la question de : comment envoyer des données via SOAP à chaque appel à une service Web (un username justement).

    Si je comprends bien ta question, tu demande comment récupérer le username utilisé pour se connecté au conteneur.
    Dans ce cas là, j'utilise cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public synchronized void handleMessage(Message message) throws Fault {
    		HttpServletRequest request = (HttpServletRequest) message
    				.get(AbstractHTTPDestination.HTTP_REQUEST);		
    		if (request != null) {
    			clientIpAddr = request.getRemoteAddr();	
    			username = request.getUserPrincipal();
    		}
    	}

    Par contre je suis complètement bloqué sur mon pb, si qq'un pouvait m'aider
    C'est cette histoire de "phase" et d'interceptor qui me rend dingue.
    J'ai beau ajouté un interceptor côté client pour modifier le message SOAP, le serveur ne réceptionne pas l'information que j'ai ajouté (le username)...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2008
    Messages : 14
    Par défaut solution
    Voici une solution à mon pb pour ceux que ça intéresse. ça répond peut-être à ton pb également

    http://www.developpez.net/forums/d99...s/#post5577697

Discussions similaires

  1. CXF - Interceptor et Phases
    Par drakss dans le forum Services Web
    Réponses: 2
    Dernier message: 11/08/2011, 11h39
  2. [utilisation de CXF] Ou existe-t-il un bon tutoriel ?
    Par caballero dans le forum Services Web
    Réponses: 2
    Dernier message: 06/02/2008, 14h52
  3. Interceptors : struts.xml et bibliothèques
    Par tiboudchou dans le forum Struts 2
    Réponses: 5
    Dernier message: 13/09/2007, 10h09
  4. [Security] Bloquer l'accès manuel aux pages : Interceptor ?
    Par ReiVon dans le forum Spring
    Réponses: 5
    Dernier message: 24/05/2007, 21h26

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