Метро - PullRequest
       34

Метро

3 голосов
/ 13 января 2010

Я создал прототип клиента веб-сервисов, используя 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. Я попробовал несколько разных примеров из интернета, которые не сработали. Любая помощь будет оценена.

1 Ответ

1 голос
/ 14 января 2010

Возможно проверить Реализация профиля имени пользователя WS-Security для веб-служб на основе Metro . Этот урок был полезен для меня в прошлом.

...