My issue is when array.getArray() (Point A) is called, then it calls A.readSQL() (Point B) first so that all data is set and saved somewhere. Then at Point C, it calls A.readSQL() again but at this time there no more data to read as it has been read, and the result is I get B object with null values, no exception occurs. I been struggling for 2 days and couldn't figure it out. Everything parses out correctly if I use B as param instead of BLIST.
I suggest using Oracle's JDBC thin driver which maps database table types, like your BLIST type, to java.sql.Array and object types, like your types A and B, to java.sql.Struct.
Also, I personally prefer using a PL/SQL stored function, rather than a stored procedure with an OUT parameter.