检查 Web Service SOAP 故障代码和字符串的行为更改

此规则会标记对用来检索 SOAP 故障和字符串的方法的调用。Web Service 运行时环境所返回的缺省故障代码和字符串在 WebSphere Application Server V8 中已发生更改。

具体而言,标记了下列方法:

更改缺省故障代码和字符串是为了修正与使用 XML 加密的 Web Service 相关的潜在安全漏洞。作为修正的一部分,从 Web Service 运行时环境所生成的任何 SOAP 故障中移除了详细信息。缺省情况下,在 V8 中,Web Service 运行时环境会使运行时环境所生成的所有故障统一成单一故障类型(包含故障代码 soapenv:Server 和故障字符串 Internal Error)。

如果应用程序期望运行时环境故障代码或字符串提供详细信息,那么您可能需要修改应用程序。您还可以使用 webservices.unify.faults Java 虚拟机定制属性来更改缺省行为。要还原为前发行版的行为,请将 webservices.unify.faults 设为 false

在 WebSphere Application Server V8 之前,缺省行为是在故障代码或字符串中返回详细信息。此问题也已在服务流(包括 6.0.2、6.1 和 7.0)中修正,但这些发行版中的缺省行为保持不变。对于 Service Release,webservices.unify.faults 的缺省值为 false。在这些发行版中将该值更改为 true 以获取与 V8 相同的行为。

JAX-WS 示例:
import javax.xml.ws.soap.SOAPFaultException;
import javax.xml.ws.soap.SOAPFault;

try {
// some code that causes a fault
...
} catch (SOAPFaultException e) {
SOAPFault soapFault = e.getFault();
String faultCode = soapFault.getFaultCode();
String faultString = soapFault.getFaultString();
...
}


JAX-RPC 示例:
import javax.xml.rpc.soap.SOAPFaultException;
import javax.xml.namespace.QName;

try {
// some code that causes a fault
...
} catch (SOAPFaultException e) {
QName faultCode = e.getFaultCode();
String faultString = e.getFaultString();
...
}

在这两个示例中,会标记对 getFaultCode()getFaultString() 方法的调用。

有关更多信息,请参阅: