如何避免消息:使用CXF“SOAP 1.1不支持操作getFaultSubCodes”

时间:2015-03-02 15:23:37

标签: java soap cxf jax-ws

我的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的调用会引发由CXF捕获的UnsupportedOperationException,但SOAPFault的实现类会记录该消息。是否存在SOAP 1.1特定的CXF故障拦截器?

有没有人知道如何避免CXF调用不支持的GetFaultSubcodes操作?

1 个答案:

答案 0 :(得分:2)

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

你至少有这两个解决方案:

  1. 如果在代码中创建了SOAP错误,则在实例化用于创建错误的工厂时传递协议版本1.2。 请注意OP的评论: 如果使用此功能,您可能需要在faultCode实例化时修改SOAP SOAPFaultException字段值解。 SOAP 1.1和1.2具有faultCode字段的不同值。
  2. SOAPFactory fac = SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);

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