For sure something is wrong in your code, if you really throw an exception, it will be wrapped inside a SpiceException. Invoke spiceException.getCause() to get your original exception.
Check the logs, you should see that exception being processed inside RoboSpice. Maybe something wrong happens before with the cache, but normally the exception will be passed to the listener.