Something needs to be done client side, because you cannot be sure that you will not get a null from the CallableStatement, and you cannot construct an empty ResultSet.
Generally it is not advisable to return ResultSets, or any
JDBC object, to your code because it is easy to create resource problems that way. As soon as you close any Statement (including CallableStatement) any associated ResultSet is also closed. So returning them requires your Statement to remain open, but if you leave the scope where the Statement is defined you loose the reference but it still exists on the heap and the server because it was not closed.
If you have any control over the client code I recommend a rewrite to avoid return ResultSets, you might not get into trouble but I say "better safe than sorry". But as a minimum of have to deal with possible null returns.
While not recommended you can look into the actual need for CallableStatements, maybe PreparedStatements will work for you. Then executeQuery() becomes an option again, you do not need to touch the client code, and can return ResultSets without worrying about null.