我需要为提供 Soap-Webservice 的第三方产品编写模拟实现。
提供了 WSDL 文件,我无法更改它。它包含各种策略,包括 WS-addressing- 和 WS-security-policies。 该服务的客户端由另一个团队实现。我可以访问客户端源代码,但不能访问第三方服务源代码。 客户端、第三方服务和我的实现都使用相同的 WSDL 文件:https://www.xoev.de/sixcms/media.php/13/XTA2Version3.zip
其他开发人员(客户端和第三方服务)都说他们使用 Apache CXF,并且没有添加任何关于 Soap-Headers 的配置/定制/实现。我跟踪了第三方产品的响应,所有必需的标头都存在。
我使用 cxf-spring-boot-starter-jaxws 和 cxf-codegen-plugin.
CXF 文档指出: “在 CXF 2.2 中,如果 cxf-rt-ws-policy 和 cxf-rt-ws-security 模块在类路径上可用,WS-SecurityPolicy 东西会自动启用。由于整个安全运行时是策略驱动的,唯一的要求是是策略引擎和安全策略可用。” https://cxf.apache.org/docs/ws-securitypolicy.html
我添加了 cxf-rt-ws-security 和 cxf-rt-ws-policy 作为直接的 Maven 依赖项以确保它们可用。
我的代码既不发送所需的签名确认,也不在响应中发送 WS-addressing 标头。 我没有运气就尝试了以下组合:
我可以通过手动添加标头来减轻 WS 寻址错误,但这对签名确认不起作用,应该没有必要。
客户端错误是:
javax.xml.ws.soap.SOAPFaultException:代表 消息寻址属性不存在 在 org.apache.cxf.jaxws.JaxWsClientProxy.mapException (JaxWsClientProxy.java:195) ~[cxf-rt-frontend-jaxws-3.5.5.jar:3.5.5] 在 org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:145) ~[cxf-rt-frontend-jaxws-3.5.5.jar:3.5.5]
javax.xml.ws.soap.SOAPFaultException:这些策略替代方案可以 不满意: {http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}Wss11: 签名确认策略验证失败 在 org.apache.cxf.jaxws.JaxWsClientProxy.mapException (JaxWsClientProxy.java:195) ~[cxf-rt-frontend-jaxws-3.5.5.jar:3.5.5] 在 org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:145) ~[cxf-rt-frontend-jaxws-3.5.5.jar:3.5.5]
所以客户端强制执行策略,但我的服务器实现不会自动提供所需的标头,如文档中所述,并且似乎在第三方实现中工作。
我错过了什么?