Web Service - Axis - Comment faire
Bonjour,
J'aimerais savoir si quelqu'un a déjà fait un appel a web service sécurisé par ws-security avec les classes générées par Axis (a partir du WSDL).
Web Service - Axis - Réponse
Ca y est !! :mrgreen: après avoir bien galéré, j'ai trouvé la solution. Je la post ici, au cas où ça pourrait aider une autre personne :
En fait pour permettre de renseigner un login/mdp dans le header du messahe soap, et ce à partir des classes générées par Axis, on doit créer un fichier .wsdd, et appeler le code suivant :
Code:
1 2 3 4 5
|
EngineConfiguration config = new FileProvider("client.wsdd");
ServiceXXX service = new ServiceXXXLocator( config );
--> puis appeler le web service a partir du STUB |
Le fichier .wsdd contient quant à lui (à placer dans le répertoire des "resources" du projet) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender"/>
<globalConfiguration >
<requestFlow >
<handler type="java:org.apache.ws.axis.security.WSDoAllSender" >
<parameter name="action" value="UsernameToken"/>
<parameter name="user" value="login"/>
<parameter name="passwordCallbackClass" value="org.***.****.****.ClientPasswordCallback"/>
<parameter name="passwordType" value="PasswordDigest"/>
</handler>
</requestFlow >
</globalConfiguration >
</deployment> |
La classe ClientPasswordCallback contient :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public class ClientSurfiPasswordCallback implements CallbackHandler {
/**
* @see javax.security.auth.callback.CallbackHandler#handle(javax.security.auth.callback.Callback[])
*/
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
if (callbacks[i] instanceof WSPasswordCallback) {
WSPasswordCallback pc = (WSPasswordCallback)callbacks[i];
// set the password given a username
if ("login".equals(pc.getIdentifer())) {
pc.setPassword("motDePasse");
}
} else {
throw new UnsupportedCallbackException(callbacks[i], "Unrecognized Callback");
}
}
}
} |