Apache CXF 服务不添加 WSDL 文件中现有策略指定的必需标头

问题描述 投票:0回答:0

我需要为提供 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 标头。 我没有运气就尝试了以下组合:

  • CXF 3.5.5、Spring Boot 2.6.4、Java 11
  • CXF 4.0.0,Spring Boot 3.0.3,Java 17

我可以通过手动添加标头来减轻 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]

  • 对于缺少的 wsse-header:

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]

所以客户端强制执行策略,但我的服务器实现不会自动提供所需的标头,如文档中所述,并且似乎在第三方实现中工作。

我错过了什么?

java spring-boot soap cxf policies
© www.soinside.com 2019 - 2024. All rights reserved.