Many parts of the internal protocol code such as RTalk and RConnection catch low-level exceptions and return null making lower-level error handling on the Java side hard (see also comments in #175). Way back the first client used null to signal errors, but then a general REngine client was created which introduced exceptions. However, the low-level Rserve code has not adopted it yet and it still catching them instead of creating the corresponding exceptions.