Apache CXF中的LoggingInInterceptor

时间:2016-01-08 09:59:33

标签: java apache rest cxf interceptor

我必须在拦截器级别编写一个CustomLogger,我指的是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

即使我们不在此处更改输入流,您能告诉我为什么要这样做。如果给出相同的详细描述,将会非常有用。

1 个答案:

答案 0 :(得分:0)

输入流实际上已更改。记录将“消耗”其字节,然后流将设置为结束。这使得它无法用于跟踪消息处理程序。因此,拦截器首先复制字节以将它们保存在内存中,然后在新的输入流中使用它们,并在另一个新的输入流中提供以下拦截器访问(这对于实际的http输入流是不可能的,但是与内存中的字节有关)。