我必须在拦截器级别编写一个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);**
}
即使我们不在此处更改输入流,您能告诉我为什么要这样做。如果给出相同的详细描述,将会非常有用。
答案 0 :(得分:0)
输入流实际上已更改。记录将“消耗”其字节,然后流将设置为结束。这使得它无法用于跟踪消息处理程序。因此,拦截器首先复制字节以将它们保存在内存中,然后在新的输入流中使用它们,并在另一个新的输入流中提供以下拦截器访问(这对于实际的http输入流是不可能的,但是与内存中的字节有关)。