public String safeSubstr(String value, int startPos, int length, Container container)
         throws StreamTransformationException {
      /*
       * @Author: Nicola Martella | www.nick4name.eu La funzione ritorna la
       * sottostringa di value a partire da startPos (in base 0) per la lunghezza
       * length. Es1: value: "ABCDEFGHIJ" startPos=6 length=3 ret: "GHI" Se la
       * posizione di length a partire da startPos eccede la lunghezza di value, viene
       * ritornata la sottostringa a partire da startPos per tutta la lunghezza
       * rimanente. Es2: value: "ABCDEFGHIJ" startPos=6 length=10 ret: "GHIJ" Se la
       * posizione di startPos e' maggiore della lunghezza di value, viene ritornata
       * una stringa vuota. Es3: value: "ABCDEFGHIJ" startPos=11 length=3 ret: "" Se
       * value è null, viene ritornata una stringa vuota. Es4: value: null startPos=0
       * length=3 ret: "" Se length e/o startPos sono < 0 vengono posti a 0.
       */
      if (value == null)
         return "";
      if (length < 0)
         length = 0;
      if (startPos < 0)
         startPos = 0;
      int toPos = startPos + length;
      if (toPos > value.length()) {
         toPos = value.length();
      }
      if (startPos > value.length()) {
         startPos = value.length();
      }
      return value.substring(startPos, toPos);
   }