java - 如何避免消息 : "Operation getFaultSubCodes not supported by SOAP 1.1" with CXF

标签 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 的调用会抛出 UnsupportedOperationException,由 CXF 捕获,但 SOAPFault 的实现类会记录消息。是否有特定于 SOAP 1.1 的 CXF 故障拦截器?

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

最佳答案

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

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

  1. 如果 SOAP 错误是在您的代码中创建的,请在实例化用于创建错误的工厂时传递协议(protocol)版本 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 日)

关于java - 如何避免消息 : "Operation getFaultSubCodes not supported by SOAP 1.1" with CXF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28813329/

相关文章:

java - Apache Camel,CXF : java. lang.IllegalStateException:Locker 不可重入

java - printf 中文件的输出

soap - 迁移到 Jakarta : ClassNotFoundException: com. sun.xml.internal.ws.spi.ProviderImpl

java - 在 spring 中使用 Apache cxf 拦截器和 log4j 记录完整的请求和响应

java - 在 JAX-WS webservice 方法中获取原始 XML 参数

Java:使用 Axis2 stub 类调用 Web 服务

java - 使用 matlab 中的 java 类时主文件夹发生变化

java - Libgdx 无需 TiledMap 创建快速 map

java - 我怎样才能正确地做到这一点,以便能够在 DBSelectQuery 类中进行选择?

java - 向现有 Web 服务添加额外方法