3
我使用weblogic 10.3中提供的api创建了一个web服务客户端原型。我被告知我需要使用Metro 2.0(它已经被用于其他项目)。我遇到的问题是WSDL不包含任何安全策略信息,但每个方法调用都需要一个UsernameToken。在weblogic中,我能够编写我自己的策略xml文件并使用它实例化我的服务(请参阅下文),但是我似乎无法弄清楚如何使用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);
...
我可以使用地铁,但是我无法弄清楚如何将其配置为发送到我的生成代理类用户名令牌。我尝试了几个不同的例子,从网上没有工作。任何帮助,将不胜感激。
谢谢。我已经使用了该教程,并能够通过修改WSDL来设置策略。我真的希望有一种类似于Weblogic的方法,我可以通过编程来设置它。 – Rodney 2010-01-15 19:36:06
我也希望有一种方法,我不必修改WSDL。在我的情况下,WSDL由第三方维护,我无法控制那里的内容。 – 2010-06-02 07:22:03