Finalmente (con un poco de ayuda de otros) descubrí la respuesta a esto. Vino en tres partes:
La primera fue que necesitaba usar un:
OracleCallableStatement stmt = (OracleCallableStatement) conn.prepareCall(query);
en lugar del simple JDBC CallableStatement que había estado tratando de usar.
La segunda parte fue que tuve que registrar mi parámetro "out" de la siguiente manera:
stmt.registerOutParameter(2, OracleTypes.STRUCT, "DATA_SUMMARY_TAB");
La tercera parte, y está implícita en la parte 2 anterior, era que "DATA_SUMMARY_TAB" tenía que estar en MAYÚSCULAS. Si lo escribe en minúsculas, obtendrá un mensaje de error críptico como el siguiente:
java.sql.SQLException: invalid name pattern: MYTEST.data_summary_tab
en oracle.jdbc.oracore.OracleTypeADT.initMetadata(OracleTypeADT.java:553)en oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:469)en oracle.sql.StructDescriptor.initPickler(StructDescriptor.java:390)en oráculo.sql.StructDescriptor.(StructDescriptor.java:320)
Eso es todo.
Además, tenga en cuenta que nuestro tipo de objeto personalizado no estaba en ningún paquete. Si es así, es posible que deba modificar un poco el tercer parámetro.