Я наткнулся на код, который использует отражение, чтобы добраться до переменной «путь» в FileInputStream!! Более странным является то, что commons.lang.reflect.FieldUtils.readField(is, "path", true)
выбрасывает java.lang.IllegalArgumentException
. Тоже с перерывами... Может быть, к этому приводит какой-то конкретный сценарий, но я не могу понять. Любые указатели на то, что может привести к тому, что отражение не сможет «увидеть» Поле?
Код похоронен во множестве каскадных рабочих процессов, связанных с бессмыслицей, но вот соответствующая часть -
//This same method is invoked multiple times on same file. If it matters?
method(SourceCall<Object, InputStream> sc) {
InputStream is = sc.getInput();
if (is instanceof FileInputStream) {
FileInputStream fileInputStream = (FileInputStream)is;
//The line below throws IllegalArgumentException - sometimes
String fileName = (String)FieldUtils.readField(fileInputStream , "path", true);
return fileName;
}
}