code: 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;
      }
docs: Reads a file resource (including it's binary content) from the VFS,
  using the specified resource filter.<p>
  
  Iterates through all configured resource wrappers till the first returns not <code>null</code>.<p>
  
  If the resource contains textual content and the encoding is UTF-8, then the byte order mask
  for UTF-8 is added at the start of the content to make sure that a client using this content
  displays it correctly.<p>
  
  @see I_CmsResourceWrapper#readFile(CmsObject, String, CmsResourceFilter)
  @see CmsObject#readFile(String, CmsResourceFilter)
  
  @param resourcename the name of the resource to read (full path)
  @param filter the resource filter to use while reading
  
  @return the file resource that was read
  
  @throws CmsException if the file resource could not be read for any reason