docs: @Override
      public void handleMessage(final Message message) throws Fault {
          final InputStream is = message.getContent(InputStream.class);
          if (WireTapHelper.isMessageContentToBeLogged(message, logMessageContent, logMessageContentOverride)) {
              if (null == is) {
                  Reader reader = message.getContent(Reader.class);
                  if (null != reader) {
                      String encoding = (String) message.get(Message.ENCODING);
                      if (encoding == null) {
                          encoding = "UTF-8";
                      }
                      try {
                          final CachedOutputStream cos = new CachedOutputStream();
                          final Writer writer = new OutputStreamWriter(cos, encoding);
                          IOUtils.copy(reader, writer, 1024);
                          reader.reset();
                          writer.flush();
                          message.setContent(InputStream.class, cos.getInputStream());
                          message.setContent(Reader.class, null);
                          message.setContent(CachedOutputStream.class, cos);
                          closeCachedOutputStream(message, cos);
                      } catch (IOException e) {
                          throw new RuntimeException(e);
                      } finally {
                          try {
                              reader.reset();
                          } catch (IOException e) {
                          }
                      }
                  }
              } else {
                  try {
                      final CachedOutputStream cos = new CachedOutputStream();
                      // TODO: We should try to make this streaming
                      //WireTapInputStream wtis = new WireTapInputStream(is, cos);
                      //message.setContent(InputStream.class, wtis);
                      IOUtils.copyAndCloseInput(is, cos);
                      message.setContent(InputStream.class, cos.getInputStream());
                      message.setContent(CachedOutputStream.class, cos);
                      closeCachedOutputStream(message, cos);
                  } catch (IOException e) {
                      throw new RuntimeException(e);
                  }
              }
          }else {
              try {
                  final CachedOutputStream cos = new CachedOutputStream();
                  cos.write(WireTapHelper.CONTENT_LOGGING_IS_DISABLED.getBytes(Charset.forName("UTF-8")));
                  message.setContent(CachedOutputStream.class, cos);
                  message.setContent(InputStream.class, is);
                  closeCachedOutputStream(message, cos);
              } catch (IOException e) {
                  throw new RuntimeException(e);
              }
          }
      }