2016-01-08 76 views
0

我必須在攔截器級別編寫CustomLogger,並且我指的是Apache CXF中的LoggingInInterceptor代碼。我在代碼中看到,它首先從消息中獲取輸入流,然後再將其設置回消息。Apache CXF中的LoggingInInterceptor

請參考下面的代碼和網址相同:

// 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輸入流是不可能的,但是與內存中的字節無關)。