Я создал прототип клиента веб-сервисов, используя API, доступные в weblogic 10.3. Мне сказали, что мне нужно использовать Metro 2.0 (он уже используется для других проектов). Проблема, с которой я сталкиваюсь, заключается в том, что WSDL не содержит никакой информации о политике безопасности, но для каждого вызова метода требуется UsernameToken. В weblogic я смог написать свой собственный XML-файл политики и создать экземпляр своего сервиса с ним (см. Ниже), однако я не могу понять, как сделать то же самое с помощью Metro.
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);
...
Я могу сгенерировать свои прокси-классы, используя Metro, но не могу понять, как настроить его для отправки UsernameToken. Я попробовал несколько разных примеров из интернета, которые не сработали. Любая помощь будет оценена.