Messieurs (et mesdames) bonjour,


Avant de décrire avant mon problème, je tiens à préciser que je n'ai pas trop de connaissances dans les webservices, mais que je dois exceptionnellement en consommer un depuis un client Java. Mes connaissances dans le domaine étant ainsi réduites, mon discours paraîtra peut être simpliste aux spécialistes. Je tiens également à ajouter qu'avant de poster sur ce forum, j'ai parcouru longuement les documentations, forums et mailing-lists afin de résoudre mon problème. J'ai à vrai dire résolu énormément de problèmes sur ce sujet avant de me trouver bloqué par celui décrit ci-dessous.

Description du problème
Je dois donc dans le cadre d'un projet, consommer un webservice WCF à partir d'un client Java. Pour cela j'ai utilisé Axis2 et j'ai généré mon stub en utilisant wsdl2java.

L'utilisation du webservice est sécurisé au niveau du transport (SSL) et du message (WS-Security).

Passons la sécurisation SSL que j'ai réussi à maîtriser, mon problème se situe à un autre niveau.

Le stub généré m'envoyait des requêtes SOAP sans headers WS-Security. J'ai donc rajouté dans mon client la génération d'un usernameToken et d'un TimeStamp. En utilisant TCPMonitor, je capture ma requête SOAP. je la teste depuis SoapUI, elle est correcte. J'obtiens bien une réponse à ma requête et le fournisseur du service me confirme que l'appel a fonctionné.

La réponse SOAP a la forme suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
   <s:Header>
      <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <u:Timestamp u:Id="_0">
            <u:Created>2009-10-27T11:01:26.031Z</u:Created>
            <u:Expires>2009-10-27T11:06:26.031Z</u:Expires>
         </u:Timestamp>
      </o:Security>
   </s:Header>
   <s:Body/>
</s:Envelope>
Quand je fais appel au service à partir de mon client Java, l'appel semble fonctionner, mais une erreur est levée lorsque j'obtiens une réponse :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
org.apache.axis2.AxisFault: Must Understand check failed for header http://www.w3.org/2005/08/addressing : Action
        at org.apache.axis2.engine.AxisEngine.checkMustUnderstand(AxisEngine.java:86)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:135)
        at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:336)
        at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:389)
        at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:211)
        at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
Je ne sais pas comment gérer cette exception, ni lui apporter une signification particulière.

Quelqu'un pourrait-il m'aiguiller sur la signification de cette erreur ?
lL lecture de cette page (http://wso2.org/library/tutorials/un...header-s-error) n'a pas pu m'orienter vers une solution.

Merci par avance de toute l'aide qui pourra m'être apportée.

Cordialement.