docs: public CmsFile readFile(String resourcename, CmsResourceFilter filter) throws CmsException {
  
          CmsFile res = null;
  
          // iterate through all wrappers and call "readFile" till one does not return null
          List<I_CmsResourceWrapper> wrappers = getWrappers();
          Iterator<I_CmsResourceWrapper> iter = wrappers.iterator();
          while (iter.hasNext()) {
              I_CmsResourceWrapper wrapper = iter.next();
              res = wrapper.readFile(m_cms, resourcename, filter);
              if (res != null) {
                  break;
              }
          }
  
          // delegate the call to the CmsObject
          if (res == null) {
              res = m_cms.readFile(resourcename, filter);
          }
  
          // for text based resources which are encoded in UTF-8 add the UTF marker at the start
          // of the content
          if (needUtf8Marker(res)) {
  
              if (LOG.isDebugEnabled()) {
                  LOG.debug(Messages.get().getBundle().key(Messages.LOG_ADD_UTF8_MARKER_1, res.getRootPath()));
              }
  
              res.setContents(CmsResourceWrapperUtils.addUtf8Marker(res.getContents()));
          }
  
          return res;
      }