我们的团队正在使用Spring-WS和XWSS实现基于SOAP的Web服务。到目前为止,我们一直依靠Spring-WS从XSD生成WSDL。我们现在正在考虑是使用WS-SecurityPolicy记录WSDL中的安全性要求,还是将它们传递到单独的文档中。以下是我们正在思考的问题:
什么是常态?将策略放在WSDL中是否常见?
许多(任何?)客户端生成器是否在WSDL中获取WS-SecurityPolicy信息?
Spring-WS在生成WSDL时不支持WS-SecurityPolicy。切换到Apache CXF会对我们有所帮助吗?
此外,我们知道REST越来越受欢迎,但SOAP已经由权力指定。谢谢!
答案 0 :(得分:1)
希望这对任何人都有帮助。
什么是常态?这是常见的 WSDL中的策略?
是的,这很常见。
许多(任何?)客户端生成器选择 WSDL中的WS-SecurityPolicy信息?
我不知道很多,我使用metro,它确实根据安全限制生成客户端。
答案 1 :(得分:1)
所以这是你可以做的,而且很简单:
1)在项目中包含cxf-bundle库。如果你使用的是maven,你可以这样做:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle</artifactId>
<version>2.7.18</version>
</dependency>
2)阅读here如何从wsdl生成java类。
3)确保在pom文件中指向正确的wsdlLocation,以便从wsdl生成java文件。
4)初始化生成的客户端并注入提供给您的用户名和密码。像这样:
final YourService service = new YourService();
final YourStub stub = service.getService();
final Map ctx = ((BindingProvider)stub).getRequestContext();
ctx.put("ws-security.username", userName);
ctx.put("ws-security.password", password);
stub.callYourMethod();
PS:请确保您拥有正确的库,我只是使用了cxf-bundle而没有使用cxf,而且它有效!之前它不起作用,因为我单独包含来自cxf的库。
希望有所帮助!!