When errors are propagated through the JNI barrier, two mechanisms are involved:
- the Status CheckException(JNIEnv* env) function for Java-to-C++ error translation
- the JniAssertOkOrThrow(arrow::Status status) and T JniGetOrThrow(arrow::Result<T> result) functions for C++-to-Java error translation
Currently, both mechanisms lose most context about the original error, such as its type and any additional state, such as the optional StatusDetail in C++ or any properties in Java (which I'm sure exist on some exception classes).
We should improve these mechanisms to retain as much context as possible. For example, in a hypothetical Java-to-C++-to-Java error propagation scenario, the original Java exception from inner code should ideally be re-thrown in the outer Java context (we already support this in Python btw).