I was able to find the solution. Heres what was wrong, in case it can be of help to others
the Java API was returning the List and in the JNI after the invocation, I was trying to treat it as a jobjectArray which obviously will not work because in JNI terms it will be a jobject and we have to treat as a jobject (correct me if this is wrong). I followed implementations that were already in place but seems they were never tested.
The behaviour that really puzzled me was that it never complained about the typecasting I was doing to convert it to a jobjectarray and even let me traverse the corrupted jobjectarray and even extract a corrupted element. That took me a while to troubleshoot.
all this made me think, languages like Haskell with their strong type inference ought to be more used for application softwares.