1.Here you are using exceptions for controlling program flow which is a bad programming practice.

2. You add two exceptions to your method signature for handling different error conditions which is a bad approach if the method throws, lets say 5 exceptions.
A better approach would be to add a variable of throwable type to your baseException class and assign the exception to this var.
In the client code you can retrieve this exception and do custom processing using instanceOf .