package com.netflix.governator.guice.jersey; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.netflix.governator.providers.AdvisableAnnotatedMethodScanner; import com.netflix.governator.providers.ProvidesWithAdvice; import com.sun.jersey.api.core.DefaultResourceConfig; import com.sun.jersey.api.core.ResourceConfig; import com.sun.jersey.guice.spi.container.servlet.GuiceContainer; import javax.inject.Named; import javax.inject.Singleton; import javax.servlet.ServletContext; /** * Module enabling support for Jersey configuration via advisable bindings for {@link DefaultResourceConfig}. * This module provides an alternative Guice integration based on jersey-guice {@link GuiceContainer} but with * less opinions, such as automatically adding any bound class with {@literal @}Path as a resources. * * Applications are expected to customize {@link DefaultResourceConfig} to provide a whitelist of * root resources to expose. This can be done by adding the following {@link @Advises} method to any * Guice module (normally an implementation of JerseyServletModule) * * <pre>{@code @Advises @Singleton @Named("governator") UnaryOperator<DefaultResourceConfig> adviseWithMyApplicationResources() { return defaultResourceConfig -> { // All customizations on {@link DefaultResourceConfig} will be picked up // Specify list of @Path annotated resourcesto serve defaultResourceConfig.getClasses().addAll(Arrays.asList( MyApplicationResource.class )); return defaultResourceConfig; }; } * }</pre> * * Additionally this module adds a binding to the {@link ServletContext} for Jersey. It can be injected * as {@code @Named("governator") ServletContext} * * @see GovernatorServletContainer */ public final class GovernatorJerseySupportModule extends AbstractModule { @Override protected void configure() { bind(GuiceContainer.class).to(GovernatorServletContainer.class).asEagerSingleton(); install(AdvisableAnnotatedMethodScanner.asModule()); } @ProvidesWithAdvice @Singleton @Named("governator") DefaultResourceConfig getDefaultResourceConfigConfig() { return new DefaultResourceConfig(); } @Singleton @Provides @Named("governator") ResourceConfig getResourceConfig(@Named("governator") DefaultResourceConfig config) { return config; } @Singleton @Provides @Named("governator") ServletContext getServletContext(GovernatorServletContainer container) { return container.getServletContext(); } @Override public int hashCode() { return getClass().hashCode(); } @Override public boolean equals(Object obj) { return getClass().equals(obj.getClass()); } }