Throwing exceptions if there is not exactly one box retrieved
I'd suggest you just get rid of the throwing method and throw it in the retrieveBox method like this: 

throw new BoxNotFoundException("box not found");


You should catch it outside this method and handle it, do the logging etc when you catch it. Logging is part of exception handling and should be done when the exception is being handled, not before.