2016-01-08 4 views
0

Мне нужно написать CustomLogger на уровне перехватчика, и я имел в виду код LoggingInInterceptor в Apache CXF. Я вижу, что в коде он сначала получает поток ввода из сообщения, а затем снова устанавливает его обратно в сообщение.LoggingInInterceptor в Apache CXF

Пожалуйста, обратитесь ниже код и URL для того же:

// restore the delegating input stream or the input stream 
    if (is instanceof DelegatingInputStream) { 
     ((DelegatingInputStream)is).setInputStream(bis); 
    } else { 
     **message.setContent(InputStream.class, bis);** 
    } 

http://grepcode.com/file/repo1.maven.org/maven2/org.apache.cxf/cxf-api/2.7.4/org/apache/cxf/interceptor/LoggingInInterceptor.java#152

Можете ли вы, пожалуйста, дайте мне знать, почему это делается, даже если мы не меняем входной поток здесь. Это будет действительно полезно, если подробное описание дано для того же самого.

ответ

0

Входной поток фактически изменен. Ведение журнала будет «потреблять» его байты, и после этого поток будет завершен. Это делает его непригодным для последующих обработчиков сообщений. Поэтому перехватчик сначала копирует байты, чтобы сохранить их в памяти, а затем использует их в новом потоке ввода и предоставляет доступ к следующим перехватчикам в другом новом потоке ввода (что невозможно с фактическим потоком входных данных HTTP, но с байтами в памяти).