【问题标题】:How to avoid message: "Operation getFaultSubCodes not supported by SOAP 1.1" with CXF如何避免消息:带有 CXF 的“SOAP 1.1 不支持操作 getFaultSubCodes”
【发布时间】:2015-03-02 15:23:36
【问题描述】:

我的 java webapp 使用 CXF 通过 SOAP 1.1 发布一些 web 服务。

在我的服务器日志(Apache Tomcat catalina.out 文件)中,出现以下情况: GRAVE:SAAJ0303:SOAP 1.1 不支持操作 getFaultSubcodes

每当 java webapp 业务代码抛出 javax.xml.ws.soap.SOAPFaultException 的实例时,就会出现这些日志行。此异常由 Apache CXF org.apache.cxf.jaxws.interceptors.WebFaultOutInterceptor 处理,它在 SOAPFault 实例上调用 getFaultSubcodes。

对于 SOAP 1.1 SOAPFault,对 getFaultSubcodes 的调用会引发 UnsupportedOperationException,被 CXF 捕获,但 SOAPFault 的实现类会记录该消息。是否有 SOAP 1.1 特定的 CXF 故障拦截器?

有谁知道避免 CXF 调用不受支持的 GetFaultSubcodes 操作的方法?

【问题讨论】:

  • 您找到解决方案了吗?我也遇到了同样的问题。
  • 亲爱的上帝,请停下来
  • @SimplyCraig,我刚刚添加了一个答案
  • @themik81,我刚刚添加了答案

标签: java soap cxf jax-ws


【解决方案1】:

Here 是一个很好的解释,here 是 2017 年 7 月 25 日报告的相关(已解决)问题。

您至少有以下两种解决方案:

  1. 如果在您的代码中创建了 SOAP 错误,请在实例化用于创建错误的工厂时传递协议版本 1.2。 来自 OP 评论的注释:如果使用此解决方案,您可能需要在实例化 SOAPFaultException 时修改 SOAP faultCode 字段值。 SOAP 1.1 和 1.2 的 faultCode 字段值不同。

SOAPFactory fac = SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);

  1. 如果可以,请使用更新的 CXF 版本 - 至少 3.0.15、3.1.13 或 3.2.0。 (全部于 2017 年 9 月 11 日发布)

【讨论】:

  • 感谢您链接到 apache cxf 库中报告和修复的问题。请注意,如果使用第一个解决方案:“通过协议版本 1.2”,则在实例化 SOAPFaultException 时可能需要修改soap faultCode 字段值。 SOAP 1.1 和 1.2 的 faultCode 字段值不同
  • 感谢您的来信。用它更新了答案,并添加了新版本现在可用的事实。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2011-09-21
  • 2021-12-21
  • 2020-07-27
  • 1970-01-01
  • 2015-11-28
相关资源
最近更新 更多