0

Spring WSでWebサービスを書いています。そして、すべてのリクエストとレスポンスをログに記録する必要があります。message が構文的に正しい場合、ロギングはSoapEnvelopeLoggingInterceptorによって処理されます。

残念ながら、Web サービスへの一部のリクエストは構文的に正しくない場合があります。たとえば、次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<Message>
    <foo>Hello, </foo>
    <!-- > symbol is missing: -->
    <bar>World!</bar
</Message>

このメッセージが私のサービスに送信されると、サーバーは「クライアントから送信された要求は構文的に正しくありません」と言って受け入れを拒否します。

構文的に正しくないメッセージをログに記録する方法について、誰かがヒントをくれないでしょうか?

4

2 に答える 2

1

無効な 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>
于 2013-11-12T09:22:23.477 に答える
0

I'd think about putting a filter into your application stack to handle the logging for you. I think you'd lose the ability to use your SoapEnvelopeLoggingInterceptor, but you'd be dealing with the message before your application has decided that it's only interested in correctly formatted XML messages.

于 2013-11-12T08:53:08.310 に答える