如何避免消息:"Operation getFaultSubCodes not supported by SOAP 1.1" with CXF
How to avoid message: "Operation getFaultSubCodes not supported by SOAP 1.1" with CXF
我的 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 的实现 class 会记录消息。是否有特定于 SOAP 1.1 的 CXF 故障拦截器?
有谁知道避免 CXF 调用不受支持的 GetFaultSubcodes 操作的方法吗?
Here's a nice explanation and here 是 2017 年 7 月 25 日报告的相关(已解决)问题。
你至少有这两种解法:
- 如果 SOAP 错误是在您的代码中创建的,请在实例化用于创建错误的工厂时传递协议版本 1.2。 来自 OP 的注释:如果使用此解决方案,您可能需要在实例化
SOAPFaultException
时修改 SOAP faultCode
字段值。 SOAP 1.1 和 1.2 对 faultCode
字段有不同的值。
SOAPFactory fac = SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
- 如果可以,请使用更新的 CXF 版本 - 至少 3.0.15、3.1.13 或 3.2.0。 (全部于2017年9月11日发布)
我的 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 的实现 class 会记录消息。是否有特定于 SOAP 1.1 的 CXF 故障拦截器?
有谁知道避免 CXF 调用不受支持的 GetFaultSubcodes 操作的方法吗?
Here's a nice explanation and here 是 2017 年 7 月 25 日报告的相关(已解决)问题。
你至少有这两种解法:
- 如果 SOAP 错误是在您的代码中创建的,请在实例化用于创建错误的工厂时传递协议版本 1.2。 来自 OP 的注释:如果使用此解决方案,您可能需要在实例化
SOAPFaultException
时修改 SOAPfaultCode
字段值。 SOAP 1.1 和 1.2 对faultCode
字段有不同的值。
SOAPFactory fac = SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
- 如果可以,请使用更新的 CXF 版本 - 至少 3.0.15、3.1.13 或 3.2.0。 (全部于2017年9月11日发布)