J'essaye d'utiliser un wsdl généré par gSoap de Netbeans. Le webservice exige que le UserNameToken être passé Lorsque j'utilise le wsdl de SoapUI (qui fonctionne), il envoie ceci:.UserNameToken dans le savon de Java
<wsse:Username>myname</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">mypass</wsse:Password>
Cependant, quand j'essayer de Netbeans en utilisant un gestionnaire (désigné par How do I add a SOAP Header using Java JAX-WS) comme ceci:
String prefix = "wsse";
String uri = "http://...wsssecurity...";
SOAPElement securityElem = factory.createElement("Security",prefix,uri);
SOAPElement UserNametokenElem = factory.createElement("UserNameToken",prefix,uri);
SOAPElement UsernameElem = factory.createElement("wsse:Username");
UsernameElem.addTextNode("myname");
SOAPElement PasswordElem = factory.createElement("Password");
PasswordElem.addTextNode("mypass");
UserNametokenElem.addChildElement(UsernameElem);
UserNametokenElem.addChildElement(PasswordElem);
securityElem.addChildElement(UserNametokenElem);
SOAPHeader header = envelope.addHeader();
header.addChildElement(securityElem);
il génère les en-têtes de savon comme ceci:
<wsse:Security xmlns:wsse="http://...wsssecurity...">
<wsse:UserNameToken xmlns:wsse="http://...wsssecurity...">
<Username xmlns="">myname</Username>
<Password xmlns="">mypass</Password>
</wsse:UserNameToken>
</wsse:Security>
qui provoque la réponse du service Web avec une erreur d'authentification.
Mes questions sont donc:
- Comment puis-je générer le UserNameToken de manière correcte (comme SoapUI fait)?
- Est-il préférable de le faire en utilisant un gestionnaire ou une bibliothèque WSSE externe comme Apache WSS4J (quelqu'un peut me montrer quelques exemples de code pour cette)
Bon exemple. Merci de m'avoir épargné beaucoup de temps! –