Source:
<code>public static AnnotationProvider createAnnotationProvider(ServletContext sc) { AnnotationProvider annotationProvider = createDefaultProvider(sc); String[] services = ServiceFactoryUtils.getServiceEntries(ANNOTATION_PROVIDER_SERVICE_KEY); if (services.length > 0) { Object provider = null; try { provider = ServiceFactoryUtils.getProviderFromEntry(services[0], new Class[] { ServletContext.class, AnnotationProvider.class }, new Object[] { sc , annotationProvider }); } catch (FacesException e) { <START> throw e; <END> } catch (NoSuchMethodException e) { } if (provider == null) { try { provider = ServiceFactoryUtils.getProviderFromEntry(services[0], new Class[] { ServletContext.class }, new Object[] { sc }); } catch (FacesException | NoSuchMethodException e) { throw new FacesException(e); } } if (provider != null) { if (!(provider instanceof AnnotationProvider)) { throw new FacesException("Class " + provider.getClass().getName() + " is not an instance of com.sun.faces.spi.AnnotationProvider"); } annotationProvider = (AnnotationProvider)provider; } } else { ServiceLoader<AnnotationProvider> serviceLoader = ServiceLoader.load(AnnotationProvider.class); Iterator iterator = serviceLoader.iterator(); if (iterator.hasNext()) { AnnotationProvider defaultAnnotationProvider = annotationProvider; annotationProvider = (AnnotationProvider) iterator.next(); annotationProvider.initialize(sc, defaultAnnotationProvider); } } return annotationProvider; }</code><technical_language>AnnotationProviderFactory#createAnnotationProvider is public API, careful change existing behaviour of this method. now, this method simply ignore exceptions occur attempting invoke two-argument constructor (this includes NoSuchMethodException other exceptions occur if constructor is found). So, FacesException ignored</technical_language>

Target:
public static AnnotationProvider createAnnotationProvider(ServletContext sc) { AnnotationProvider annotationProvider = createDefaultProvider(sc); String[] services = ServiceFactoryUtils.getServiceEntries(ANNOTATION_PROVIDER_SERVICE_KEY); if (services.length > 0) { Object provider = null; try { provider = ServiceFactoryUtils.getProviderFromEntry(services[0], new Class[] { ServletContext.class, AnnotationProvider.class }, new Object[] { sc , annotationProvider }); } catch (FacesException e) { if(!NoSuchMethodException.class.isInstance(e.getCause())) { if (LOGGER.isLoggable(Level.FINE)) { LOGGER.log(Level.FINE, e.toString(), e); } } } if (provider == null) { try { provider = ServiceFactoryUtils.getProviderFromEntry(services[0], new Class[] { ServletContext.class }, new Object[] { sc }); } catch (FacesException e) { if (LOGGER.isLoggable(Level.FINE)) { LOGGER.log(Level.FINE, e.toString(), e); } } } if (provider != null) { if (!(provider instanceof AnnotationProvider)) { throw new FacesException("Class " + provider.getClass().getName() + " is not an instance of com.sun.faces.spi.AnnotationProvider"); } annotationProvider = (AnnotationProvider)provider; } } else { ServiceLoader<AnnotationProvider> serviceLoader = ServiceLoader.load(AnnotationProvider.class); Iterator iterator = serviceLoader.iterator(); if (iterator.hasNext()) { AnnotationProvider defaultAnnotationProvider = annotationProvider; annotationProvider = (AnnotationProvider) iterator.next(); annotationProvider.initialize(sc, defaultAnnotationProvider); } } return annotationProvider; }