J'ai créé un prototype de client de services Web en utilisant les API disponibles dans weblogic 10.3. On m'a dit que je devais utiliser Metro 2.0 à la place (il est déjà utilisé pour d'autres projets). Le problème que j'ai rencontré est que le WSDL n'inclut aucune information de politique de sécurité mais un nom d'utilisateur est requis pour chaque appel de méthode. Dans weblogic, j'ai pu écrire mon propre fichier xml de politique et instancier mon service avec celui-ci (voir ci-dessous), mais je n'arrive pas à comprendre comment faire de même avec Metro.Metro UsernameToken Policy
policy.xml
<?xml version="1.0"?>
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512">
<sp:SupportingTokens>
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken10/>
<sp:HashPassword/>
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
</wsp:Policy>
Client.java (Weblogic)
ClientPolicyFeature cpf = new ClientPolicyFeature();
InputStream asStream = WebServiceSoapClient.class.getResourceAsStream("Policy.xml");
cpf.setEffectivePolicy(new InputStreamPolicySource(asStream));
try
{
webService = new WebService(new URL("http://192.168.1.10/WebService/WebService.asmx?wsdl"), new QName("http://testme.com", "WebService"));
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
WebServiceSoap client = webService.getWebServiceSoap(new WebServiceFeature[] {cpf});
List<CredentialProvider> credProviders = new ArrayList<CredentialProvider>();
String username = "user";
String password = "pass";
CredentialProvider cp = new ClientUNTCredentialProvider(username.getBytes(), password.getBytes());
credProviders.add(cp);
Map<String, Object> rc = ((BindingProvider) client).getRequestContext();
rc.put(WSSecurityContext.CREDENTIAL_PROVIDER_LIST, credProviders);
...
Je suis en mesure de générer mes classes de proxy en utilisant Metro mais je ne peux pas comprendre comment le configurer pour envoyer le Nom d'utilisateurToken. J'ai essayé plusieurs exemples différents du web qui n'ont pas fonctionné. Toute aide serait appréciée.
Merci. J'ai utilisé ce tutoriel et j'ai pu obtenir la politique en modifiant le WSDL. J'espérais vraiment qu'il y aurait une approche similaire à Weblogic où je pourrais l'installer par programmation. – Rodney
J'espère aussi une méthode où je n'ai pas besoin de modifier le WSDL. Dans mon cas, le WSDL est géré par un tiers et je n'ai aucun contrôle sur ce qui s'y trouve. –