public String safeSubstr(String value, int startPos, int length, Container container) throws StreamTransformationException{
/*
By Nicola Martella (N4N)

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);
}