无效的 SOAP 请求不会到达您的 Web 服务方法,但是对于 SOAP,客户端有责任发送有效请求。如果他们没有,他们的代码中有错误,而不是你的。
但是,如果您希望记录无效请求,那么您可以使用 Log4J(或任何您连接的日志框架)来执行此操作。如果您查看 SoapEnvelopeLoggingInterceptor 代码,您会发现它实现了 SOAP 故障的调试级别日志记录。
https://github.com/spring-projects/spring-ws/blob/master/core/src/main/java/org/springframework/ws/soap/server/endpoint/interceptor/SoapEnvelopeLoggingInterceptor.java?source=cc
public boolean handleFault(MessageContext messageContext, Object endpoint) throws Exception {
if (logFault && logger.isDebugEnabled()) {
logMessageSource("Fault: ", getSource(messageContext.getResponse()));
}
return true;
}
因此,通过配置在自己的文件中记录 SOAP 错误,您可以对失败的请求进行某种审计。您甚至可以监视该文件,以便其中的任何条目都会引起警报。
<appender name="soapFaultAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/var/log/myapp/soap-faults.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %p [%c{3}] %m%n" />
</layout>
</appender>
<appender name="async" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="1024"/>
<appender-ref ref="soapFaultAppender"/>
</appender>
<logger name="org.springframework.ws.soap.server.endpoint.interceptor">
<level value="debug" />
</logger>