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é :
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 <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>
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
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()); } } }
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>
Partager