docs: @Override
    public final T process(
      final Map<String, Object> pAddParam,
        final T pEntity, final IRequestData pRequestData) throws Exception {
      String fileToUploadName = (String) pRequestData
        .getAttribute("fileToUploadName");
      String fieldNameFilePath = pRequestData.getParameter("fieldNameFilePath");
      String fieldNameFileName = pRequestData.getParameter("fieldNameFileName");
      if (fieldNameFileName != null) {
        Method setterFileName = this.settersRapiHolder
          .getFor(pEntity.getClass(), fieldNameFileName);
        if (fileToUploadName != null) {
          setterFileName.invoke(pEntity, fileToUploadName);
        } else { // either uploaded path or null
          Method getFpn = this.gettersRapiHolder
            .getFor(pEntity.getClass(), fieldNameFilePath);
          String pth = (String) getFpn.invoke(pEntity);
          if (pth == null || "".equals(pth)) {
            setterFileName.invoke(pEntity, null);
          } else {
            //uploaded URL separator is always "/"
            int idxs = pth.lastIndexOf("/");
            if (idxs > 1) {
              setterFileName.invoke(pEntity, pth.substring(idxs + 1));
            } else {
              setterFileName.invoke(pEntity, pth);
            }
          }
        }
      }
      if (fileToUploadName != null) {
        OutputStream outs = null;
        InputStream ins = null;
        try {
          //fill file and filePath field:
          String ft = String.valueOf(new Date().getTime());
          String filePath = this.webAppPath + File.separator
            + this.uploadDirectory + File.separator
              + ft + fileToUploadName;
          ins = (InputStream) pRequestData
            .getAttribute("fileToUploadInputStream");
          outs = new BufferedOutputStream(
            new FileOutputStream(filePath));
          byte[] data = new byte[1024];
          int count;
          while ((count = ins.read(data)) != -1) {
            outs.write(data, 0, count);
          }
          outs.flush();
          Method setterFieldPath = this.settersRapiHolder
            .getFor(pEntity.getClass(), fieldNameFilePath);
          setterFieldPath.invoke(pEntity, filePath);
          String fieldNameFileUrl = pRequestData
            .getParameter("fieldNameFileUrl");
          if (fieldNameFileUrl != null) {
            Method setterFileUrl = this.settersRapiHolder
              .getFor(pEntity.getClass(), fieldNameFileUrl);
            setterFileUrl.invoke(pEntity, this.uploadDirectory
                + "/" + ft + fileToUploadName);
          }
        } finally {
          if (ins != null) {
            ins.close();
          }
          if (outs != null) {
            outs.close();
          }
        }
      } // else NULL or uploaded
      if (pEntity.getIsNew()) {
        this.srvOrm.insertEntity(pAddParam, pEntity);
        pEntity.setIsNew(false);
      } else {
        this.srvOrm.updateEntity(pAddParam, pEntity);
      }
      return pEntity;
    }