If I'm not handling Exception or Error, why catch them?

The JVM would do the same thing that I am doing in my code.
Catch Exceptions and add better context.

In general, catch widely, throw narrowly, with full added context.
Reduce Baroqueness. Create DiscoveryWorker interface.

Replaces DiscoverUrisForSite with a simpler interface with only siteUrl in the method signature. Other configuration is introduced through the constructors of the implementing classes. DiscoverUrisContext goes away..

Create DiscoveryClassWorker interface. AbstractDiscoveryWorkerFramework goes away, along with the inner classes it used.