我的
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操作?
最佳答案
Here是一个很好的解释,
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日发布)