Class ResourceConfig

java.lang.Object
javax.ws.rs.core.Application
org.glassfish.jersey.server.ResourceConfig
All Implemented Interfaces:
javax.ws.rs.core.Configurable<ResourceConfig>, javax.ws.rs.core.Configuration, ExtendedConfig, ServerConfig
Direct Known Subclasses:
ResourceConfig.RuntimeConfig, ResourceConfig.WrappingResourceConfig

public class ResourceConfig extends javax.ws.rs.core.Application implements javax.ws.rs.core.Configurable<ResourceConfig>, ServerConfig
The resource configuration for configuring a web application.
  • Field Details

    • LOGGER

      private static final Logger LOGGER
    • cachedClasses

      private transient Set<Class<?>> cachedClasses
    • cachedClassesView

      private transient Set<Class<?>> cachedClassesView
    • cachedSingletons

      private transient Set<Object> cachedSingletons
    • cachedSingletonsView

      private transient Set<Object> cachedSingletonsView
    • resetFinders

      private transient boolean resetFinders
    • state

      private volatile ResourceConfig.State state
  • Constructor Details

    • ResourceConfig

      public ResourceConfig()
      Create a new resource configuration without any custom properties or resource and provider classes.
    • ResourceConfig

      public ResourceConfig(Set<Class<?>> classes)
      Create a new resource configuration initialized with a given set of resource/provider classes.
      Parameters:
      classes - application-specific resource and/or provider classes.
    • ResourceConfig

      public ResourceConfig(Class<?>... classes)
      Create a new resource configuration initialized with a given set of resource/provider classes.
      Parameters:
      classes - application-specific resource and/or provider classes.
    • ResourceConfig

      public ResourceConfig(ResourceConfig original)
      Create a defensive resource configuration copy initialized with a given ResourceConfig.
      Parameters:
      original - resource configuration to createAndInitialize a defensive copy from.
  • Method Details

    • forApplication

      public static ResourceConfig forApplication(javax.ws.rs.core.Application application)
      Returns a ResourceConfig instance for the supplied application.

      If the application is an instance of ResourceConfig the method returns defensive copy of the resource config. Otherwise it creates a new ResourceConfig from the application.

      Parameters:
      application - Application to provide the ResourceConfig instance for.
      Returns:
      ResourceConfig instance for the supplied application.
    • forApplicationClass

      public static ResourceConfig forApplicationClass(Class<? extends javax.ws.rs.core.Application> applicationClass)
      Returns a ResourceConfig instance wrapping the application of the supplied class.
      Parameters:
      applicationClass - Class representing a JAX-RS application.
      Returns:
      ResourceConfig wrapping the JAX-RS application defined by the supplied class.
    • forApplicationClass

      public static ResourceConfig forApplicationClass(Class<? extends javax.ws.rs.core.Application> applicationClass, Set<Class<?>> defaultClasses)
      Returns a ResourceConfig instance wrapping the application of the supplied class.

      This method provides an option of supplying the set of classes that should be returned from getClasses() method if the application defined by the supplied application class returns empty sets from Application.getClasses() and Application.getSingletons() methods.

      Parameters:
      applicationClass - Class representing a JAX-RS application.
      defaultClasses - Default set of classes that should be returned from getClasses() if the underlying application does not provide any classes and singletons.
      Returns:
      ResourceConfig wrapping the JAX-RS application defined by the supplied class.
    • addProperties

      public final ResourceConfig addProperties(Map<String,Object> properties)
      Add properties to ResourceConfig.

      If any of the added properties exists already, old values of existing properties will be replaced by new values.

      Parameters:
      properties - properties to add.
      Returns:
      updated resource configuration instance.
    • setProperties

      public ResourceConfig setProperties(Map<String,?> properties)
      Set new configuration properties replacing all previously set properties.
      Parameters:
      properties - new set of configuration properties. The content of the map will replace any existing properties set on the configuration instance.
      Returns:
      the updated configuration instance.
    • property

      public ResourceConfig property(String name, Object value)
      Specified by:
      property in interface javax.ws.rs.core.Configurable<ResourceConfig>
    • register

      public ResourceConfig register(Class<?> componentClass)
      Specified by:
      register in interface javax.ws.rs.core.Configurable<ResourceConfig>
    • register

      public ResourceConfig register(Class<?> componentClass, int bindingPriority)
      Specified by:
      register in interface javax.ws.rs.core.Configurable<ResourceConfig>
    • register

      public ResourceConfig register(Class<?> componentClass, Class<?>... contracts)
      Specified by:
      register in interface javax.ws.rs.core.Configurable<ResourceConfig>
    • register

      public ResourceConfig register(Class<?> componentClass, Map<Class<?>,Integer> contracts)
      Specified by:
      register in interface javax.ws.rs.core.Configurable<ResourceConfig>
    • register

      public ResourceConfig register(Object component)
      Specified by:
      register in interface javax.ws.rs.core.Configurable<ResourceConfig>
    • register

      public ResourceConfig register(Object component, int bindingPriority)
      Specified by:
      register in interface javax.ws.rs.core.Configurable<ResourceConfig>
    • register

      public ResourceConfig register(Object component, Class<?>... contracts)
      Specified by:
      register in interface javax.ws.rs.core.Configurable<ResourceConfig>
    • register

      public ResourceConfig register(Object component, Map<Class<?>,Integer> contracts)
      Specified by:
      register in interface javax.ws.rs.core.Configurable<ResourceConfig>
    • registerClasses

      public final ResourceConfig registerClasses(Set<Class<?>> classes)
      Register annotated JAX-RS resource, JAX-RS or Jersey contract provider or JAX-RS feature in the ResourceConfig.

      Note that registered JAX-RS features are used to initialize and configure the Jersey runtime InjectionManager instance during application deployment, but are otherwise ignored by server-side runtime, unless they implement also another contract recognized by Jersey runtime.

      Also note that registration of binder classes is note supported. Binders must be registered as instances.

      Parameters:
      classes - classes to register.
      Returns:
      updated resource configuration instance.
    • registerClasses

      public final ResourceConfig registerClasses(Class<?>... classes)
      Register annotated JAX-RS resource, JAX-RS or Jersey contract provider or JAX-RS feature in the ResourceConfig.

      Note that registered JAX-RS features are used to initialize and configure the Jersey runtime InjectionManager instance during application deployment, but are otherwise ignored by server-side runtime, unless they implement also another contract recognized by Jersey runtime.

      Also note that registration of binder classes is note supported. Binders must be registered as instances.

      Parameters:
      classes - classes to register.
      Returns:
      updated resource configuration instance.
    • registerInstances

      public final ResourceConfig registerInstances(Set<Object> instances)
      Register annotated JAX-RS resource, JAX-RS or Jersey contract provider, JAX-RS feature Jersey Binder instances (singletons) in the ResourceConfig.

      Note that registered binders and JAX-RS features are used to initialize and configure the Jersey runtime InjectionManager instance during application deployment, but are otherwise ignored by server-side runtime, unless they implement also another contract recognized by Jersey runtime.

      Parameters:
      instances - instances to register.
      Returns:
      updated resource configuration instance.
    • registerInstances

      public final ResourceConfig registerInstances(Object... instances)
      Register annotated JAX-RS resource, JAX-RS or Jersey contract provider, JAX-RS feature, Jersey Binder instances (singletons) in the ResourceConfig.

      Note that registered binders and JAX-RS features are used to initialize and configure the Jersey runtime InjectionManager instance during application deployment, but are otherwise ignored by server-side runtime, unless they implement also another contract recognized by Jersey runtime.

      Parameters:
      instances - instances to register.
      Returns:
      updated resource configuration instance.
    • registerResources

      public final ResourceConfig registerResources(Resource... resources)
      Register new programmatic resource models in the ResourceConfig.
      Parameters:
      resources - resource models to register.
      Returns:
      updated resource configuration instance.
    • registerResources

      public final ResourceConfig registerResources(Set<Resource> resources)
      Register new resource models in the ResourceConfig.
      Parameters:
      resources - resource models to register.
      Returns:
      updated resource configuration instance.
    • registerFinder

      public final ResourceConfig registerFinder(ResourceFinder resourceFinder)
      Add a ResourceFinder to ResourceConfig.
      Parameters:
      resourceFinder - ResourceFinder
      Returns:
      updated resource configuration instance.
    • setApplicationName

      public final ResourceConfig setApplicationName(String applicationName)
      Set the name of the application. The name is an arbitrary user defined name which is used to distinguish between Jersey applications in the case that more applications are deployed on the same runtime (container). The name can be used for example for purposes of monitoring by JMX when name identifies to which application deployed MBeans belong to. The name should be unique in the runtime.
      Parameters:
      applicationName - Unique application name.
      Returns:
      updated resource configuration instance.
    • setClassLoader

      public final ResourceConfig setClassLoader(ClassLoader classLoader)
      Set ClassLoader which will be used for resource discovery.
      Parameters:
      classLoader - provided ClassLoader.
      Returns:
      updated resource configuration instance.
    • packages

      public final ResourceConfig packages(String... packages)
      Adds array of package names which will be used to scan for components.

      Package scanning ignores inheritance and therefore Path annotation on parent classes and interfaces will be ignored.

      Packages will be scanned recursively, including all nested packages.

      Parameters:
      packages - array of package names.
      Returns:
      updated resource configuration instance.
      See Also:
    • packages

      public final ResourceConfig packages(boolean recursive, String... packages)
      Adds array of package names which will be used to scan for components.

      Package scanning ignores an inheritance and therefore Path annotation on parent classes and interfaces will be ignored.

      Parameters:
      recursive - defines whether any nested packages in the collection of specified package names should be recursively scanned (value of true) as part of the package scanning or not (value of false).
      packages - array of package names.
      Returns:
      updated resource configuration instance.
      See Also:
    • files

      public final ResourceConfig files(String... files)
      Adds array of file and directory names to scan for components.

      Any directories in the list will be scanned recursively, including their sub-directories.

      Parameters:
      files - array of file and directory names.
      Returns:
      updated resource configuration instance.
    • files

      public final ResourceConfig files(boolean recursive, String... files)
      Adds array of file and directory names to scan for components.
      Parameters:
      recursive - defines whether any sub-directories of the directories specified in the collection of file names should be recursively scanned (value of true) as part of the file scanning or not (value of false).
      files - array of file and directory names.
      Returns:
      updated resource configuration instance.
    • invalidateCache

      final void invalidateCache()
      Invalidate cached component instances and classes.
    • lock

      final void lock()
      Switches the ResourceConfig to read-only state.

      Called by the WrappingResourceConfig if this ResourceConfig is set as the application. Also called by ApplicationHandler on WrappingResourceConfig at the point when it is going to build the resource model.

      The method also sets the application name from properties if the name is not defined yer and the property ServerProperties.APPLICATION_NAME is defined.

    • getConfiguration

      public final ServerConfig getConfiguration()
      Specified by:
      getConfiguration in interface javax.ws.rs.core.Configurable<ResourceConfig>
    • getProperties

      public final Map<String,Object> getProperties()
      Specified by:
      getProperties in interface javax.ws.rs.core.Configuration
      Overrides:
      getProperties in class javax.ws.rs.core.Application
    • getProperty

      public final Object getProperty(String name)
      Specified by:
      getProperty in interface javax.ws.rs.core.Configuration
    • getPropertyNames

      public Collection<String> getPropertyNames()
      Specified by:
      getPropertyNames in interface javax.ws.rs.core.Configuration
    • isProperty

      public final boolean isProperty(String name)
      Description copied from interface: ExtendedConfig
      Get the value of the property with a given name converted to boolean. Returns false if the value is not convertible.
      Specified by:
      isProperty in interface ExtendedConfig
      Parameters:
      name - property name.
      Returns:
      boolean property value or false if the property is not convertible.
    • getClasses

      public final Set<Class<?>> getClasses()
      Specified by:
      getClasses in interface javax.ws.rs.core.Configuration
      Overrides:
      getClasses in class javax.ws.rs.core.Application
    • getInstances

      public final Set<Object> getInstances()
      Specified by:
      getInstances in interface javax.ws.rs.core.Configuration
    • getSingletons

      public final Set<Object> getSingletons()
      Overrides:
      getSingletons in class javax.ws.rs.core.Application
    • getComponentBag

      final ComponentBag getComponentBag()
      Get the internal component bag.
      Returns:
      internal component bag.
    • configureAutoDiscoverableProviders

      final void configureAutoDiscoverableProviders(InjectionManager injectionManager, Collection<AutoDiscoverable> autoDiscoverables)
      Configure auto-discoverables.
      Parameters:
      injectionManager - injection manager to obtain auto-discoverables from.
      autoDiscoverables - list of registered auto discoverable components.
    • configureForcedAutoDiscoverableProviders

      final void configureForcedAutoDiscoverableProviders(InjectionManager injectionManager)
      Configure forced auto-discoverables.
      Parameters:
      injectionManager - injection manager to obtain auto-discoverables from.
    • configureMetaProviders

      final void configureMetaProviders(InjectionManager injectionManager, ManagedObjectsFinalizer finalizer)
    • getRuntimeType

      public javax.ws.rs.RuntimeType getRuntimeType()
      Specified by:
      getRuntimeType in interface javax.ws.rs.core.Configuration
    • isEnabled

      public boolean isEnabled(javax.ws.rs.core.Feature feature)
      Specified by:
      isEnabled in interface javax.ws.rs.core.Configuration
    • isEnabled

      public boolean isEnabled(Class<? extends javax.ws.rs.core.Feature> featureClass)
      Specified by:
      isEnabled in interface javax.ws.rs.core.Configuration
    • isRegistered

      public boolean isRegistered(Object component)
      Specified by:
      isRegistered in interface javax.ws.rs.core.Configuration
    • isRegistered

      public boolean isRegistered(Class<?> componentClass)
      Specified by:
      isRegistered in interface javax.ws.rs.core.Configuration
    • getContracts

      public Map<Class<?>,Integer> getContracts(Class<?> componentClass)
      Specified by:
      getContracts in interface javax.ws.rs.core.Configuration
    • _getClasses

      Set<Class<?>> _getClasses()
      Get configured resource and/or provider classes. The method is overridden in a private sub-type.
      Returns:
      set of configured resource and/or provider classes.
    • scanClasses

      private Set<Class<?>> scanClasses()
    • parsePropertyValue

      private String[] parsePropertyValue(String propertyName)
    • getRegisteredClasses

      Set<Class<?>> getRegisteredClasses()
      Return classes which were registered by the user and not found by class path scanning (or any other scanning).
      Returns:
      Set of classes registered by the user.
    • _getSingletons

      Set<Object> _getSingletons()
      Get configured resource and/or provider instances. The method is overridden in a private sub-type.
      Returns:
      set of configured resource and/or provider instances.
    • getResources

      public final Set<Resource> getResources()
      Description copied from interface: ServerConfig
      Get programmatically modeled resources.
      Specified by:
      getResources in interface ServerConfig
      Returns:
      programmatically modeled resources.
    • getClassLoader

      public final ClassLoader getClassLoader()
      Get resource and provider class loader.
      Returns:
      class loader to be used when looking up the resource classes and providers.
    • getApplication

      public final javax.ws.rs.core.Application getApplication()
      Returns JAX-RS application corresponding with this ResourceConfig.
      Returns:
      JAX-RS application corresponding with this ResourceConfig.
    • _getApplication

      javax.ws.rs.core.Application _getApplication()
      Allows overriding the getApplication() method functionality in ResourceConfig.WrappingResourceConfig.
      Returns:
      JAX-RS application corresponding with this ResourceConfig.
    • getApplicationName

      public String getApplicationName()
      Get the name of the Jersey application.
      Returns:
      Name of the application.
      See Also:
    • getApplicationClass

      Class<? extends javax.ws.rs.core.Application> getApplicationClass()
      Method used by ApplicationHandler to retrieve application class (this method is overridden by ResourceConfig.WrappingResourceConfig).
      Returns:
      application class
    • setApplication

      final ResourceConfig setApplication(javax.ws.rs.core.Application app)
      This method is used by ApplicationHandler to set application instance to the resource config (should always be called on WrappingResourceConfig instance, never on plain instances of ResourceConfig unless we have a bug in the code).
      Parameters:
      app - JAX-RS application
      Returns:
      this ResourceConfig instance (for convenience)
    • _setApplication

      ResourceConfig _setApplication(javax.ws.rs.core.Application app)
      Allows overriding the setApplication() method functionality in WrappingResourceConfig.
      Parameters:
      app - application to be set for this ResourceConfig
      Returns:
      this resource config instance
    • createRuntimeConfig

      static ResourceConfig createRuntimeConfig(javax.ws.rs.core.Application application)
      Create runtime configuration initialized from a given deploy-time JAX-RS/Jersey application configuration.
      Parameters:
      application - deploy-time JAX-RS/Jersey application configuration.
      Returns:
      initialized run-time resource config.
    • unwrapCustomRootApplication

      private static javax.ws.rs.core.Application unwrapCustomRootApplication(ResourceConfig resourceConfig)
    • unwrapApplication

      static javax.ws.rs.core.Application unwrapApplication(javax.ws.rs.core.Application application)
      Get the most internal wrapped application class.

      This method is similar to getApplication() except if provided application was created by wrapping multiple ResourceConfig instances, this method will return the original (inner-most) JAX-RS Application sub-class rather than a potentially intermediate ResourceConfig wrapper.

      Parameters:
      application - application that is potentially wrapped.
      Returns:
      the original, inner-most Application subclass. May return the same instance directly, in case the supplied application instance is not a wrapper ResourceConfig instance.
    • setupApplicationName

      private void setupApplicationName()