/** * Create a new Jersey server-side application handler configured by an instance of a {@link * Application JAX-RS Application sub-class}. * * @param application an instance of a JAX-RS {@code Application} (sub-)class that will be used to * configure the new Jersey application handler. */ public ApplicationHandler(Application application) { this.locator = Injections.createLocator(new ServerBinder(), new ApplicationBinder()); this.application = application; if (application instanceof ResourceConfig) { final ResourceConfig rc = (ResourceConfig) application; if (rc.getApplicationClass() != null) { rc.setApplication(createApplication(rc.getApplicationClass())); } } this.runtimeConfig = ResourceConfig.createRuntimeConfig(application); Errors.processWithException( new Runnable() { @Override public void run() { initialize(); } }); }
private Application createApplication(Class<? extends Application> applicationClass) { // need to handle ResourceConfig and Application separately as invoking forContract() on these // will trigger the factories which we don't want at this point if (applicationClass == ResourceConfig.class) { return new ResourceConfig(); } else if (applicationClass == Application.class) { return new Application(); } else { Application app = locator.createAndInitialize(applicationClass); if (app instanceof ResourceConfig) { final ResourceConfig _rc = (ResourceConfig) app; final Class<? extends Application> innerAppClass = _rc.getApplicationClass(); if (innerAppClass != null) { final Application innerApp = createApplication(innerAppClass); _rc.setApplication(innerApp); } } return app; } }