Class Resource

java.lang.Object
org.glassfish.jersey.server.model.Resource
All Implemented Interfaces:
ResourceModelComponent, Routed

public final class Resource extends Object implements Routed, ResourceModelComponent
Model of a single resource component.

Resource component model represents a collection of methods grouped under the same parent request path template. Resource class is also the main entry point to the programmatic resource modeling API that provides ability to programmatically extend the existing JAX-RS annotated resource classes or build new resource models that may be utilized by Jersey runtime.

For example:

 @Path("hello")
 public class HelloResource {
      @GET
      @Produces("text/plain")
      public String sayHello() {
          return "Hello!";
      }
 }

 ...

 // Register the annotated resource.
 ResourceConfig resourceConfig = new ResourceConfig(HelloResource.class);

 // Add new "hello2" resource using the annotated resource class
 // and overriding the resource path.
 Resource.Builder resourceBuilder =
         Resource.builder(HelloResource.class, new LinkedList<ResourceModelIssue>())
         .path("hello2");

 // Add a new (virtual) sub-resource method to the "hello2" resource.
 resourceBuilder.addChildResource("world").addMethod("GET")
         .produces("text/plain")
         .handledBy(new Inflector<Request, String>() {
                 @Override
                 public String apply(Request request) {
                     return "Hello World!";
                 }
         });

 // Register the new programmatic resource in the application's configuration.
 resourceConfig.registerResources(resourceBuilder.build());
 
The following table illustrates the supported requests and provided responses for the application configured in the example above.
RequestResponseMethod invoked
"GET /hello""Hello!"HelloResource.sayHello()
"GET /hello2""Hello!"HelloResource.sayHello()
"GET /hello2/world""Hello World!"Inflector.apply()

Author:
Marek Potociar, Miroslav Fuksa
  • Method Details

    • builder

      public static Resource.Builder builder()
      Get a new unbound resource model builder.
      Returns:
      new unbound resource model builder.
      See Also:
    • builder

      public static Resource.Builder builder(String path)
      Get a new resource model builder for a resource bound to a given path.
      Parameters:
      path - resource path.
      Returns:
      new resource model builder.
      See Also:
    • builder

      public static Resource.Builder builder(List<Resource> resources)
      Creates a resource builder instance from the list of resource which can be merged into a single resource. It must be possible to merge the resources into a single valid resource. For example all resources must have the same path, they cannot have ambiguous methods on the same path, etc.
      Parameters:
      resources - Resources with the same path.
      Returns:
      Resource builder initialized from merged resources.
    • builder

      public static Resource.Builder builder(Class<?> resourceClass)
      Create a resource model builder initialized by introspecting an annotated JAX-RS resource class.
      Parameters:
      resourceClass - resource class to be modelled.
      Returns:
      resource model builder initialized by the class or null if the class does not represent a resource.
    • builder

      public static Resource.Builder builder(Class<?> resourceClass, boolean disableValidation)
      Create a resource model builder initialized by introspecting an annotated JAX-RS resource class.
      Parameters:
      resourceClass - resource class to be modelled.
      disableValidation - if set to true, then any model validation checks will be disabled.
      Returns:
      resource model builder initialized by the class or null if the class does not represent a resource.
    • from

      public static Resource from(Class<?> resourceClass)
      Create a resource model initialized by introspecting an annotated JAX-RS resource class.
      Parameters:
      resourceClass - resource class to be modelled.
      Returns:
      resource model initialized by the class or null if the class does not represent a resource.
    • from

      public static Resource from(Class<?> resourceClass, boolean disableValidation)
      Create a resource model initialized by introspecting an annotated JAX-RS resource class.
      Parameters:
      resourceClass - resource class to be modelled.
      disableValidation - if set to true, then any model validation checks will be disabled.
      Returns:
      resource model initialized by the class or null if the class does not represent a resource.
    • isAcceptable

      public static boolean isAcceptable(Class<?> c)
      Check if the class is acceptable as a JAX-RS provider or resource.

      Method returns false if the class is either

      • abstract
      • interface
      • annotation
      • primitive
      • local class
      • non-static member class
      Parameters:
      c - class to be checked.
      Returns:
      true if the class is an acceptable JAX-RS provider or resource, false otherwise.
    • getPath

      public static Path getPath(Class<?> resourceClass)
      Get the resource class @Path annotation.

      May return null in case there is no @Path annotation on the resource.

      Parameters:
      resourceClass - resource class.
      Returns:
      @Path annotation instance if present on the resource class (i.e. the class is a root resource class), or null otherwise.
    • builder

      public static Resource.Builder builder(Resource resource)
      Get a new resource model builder initialized from a given resource model.
      Parameters:
      resource - resource model initializing the resource builder.
      Returns:
      new resource model builder.
    • getPath

      public String getPath()
      Description copied from interface: Routed
      Get the path direct assigned to the component.
      Specified by:
      getPath in interface Routed
      Returns:
      component path.
    • getPathPattern

      public PathPattern getPathPattern()
      Description copied from interface: Routed
      Get the path pattern that can be used for matching the remaining request URI against this component represented by this model.
      Specified by:
      getPathPattern in interface Routed
      Returns:
      component path pattern.
    • getParent

      public Resource getParent()
      Get the parent resource for this resource model or null in case this resource is a top-level resource and does not have a parent.
      Returns:
      parent resource or null if the resource does not have a parent.
      Since:
      2.1
    • getName

      public String getName()
      Get the resource name.

      If the resource was constructed from a JAX-RS annotated resource class, the resource name will be set to the fully-qualified name of the resource class.

      Returns:
      reference JAX-RS resource handler class.
    • getNames

      public List<String> getNames()
      Return a list of resource names.
      Returns:
      a list of resource names.
    • getResourceMethods

      public List<ResourceMethod> getResourceMethods()
      Provides a non-null list of resource methods available on the resource.
      Returns:
      non-null abstract resource method list.
    • getResourceLocator

      public ResourceMethod getResourceLocator()
      Provides a resource locator available on the resource.
      Returns:
      Resource locator if it is present, null otherwise.
    • getAllMethods

      public List<ResourceMethod> getAllMethods()
      Provides resource methods and resource locator are available on the resource. The list is ordered so that resource methods are positioned first before resource locator.
      Returns:
      List of resource methods and resource locator.
    • getChildResources

      public List<Resource> getChildResources()
      Returns the list of child resources available on this resource.
      Returns:
      Non-null list of child resources (may be empty).
    • getHandlerClasses

      public Set<Class<?>> getHandlerClasses()
      Get the method handler classes for the resource methods registered on the resource.
      Returns:
      resource method handler classes.
    • getHandlerInstances

      public Set<Object> getHandlerInstances()
      Get the method handler (singleton) instances for the resource methods registered on the resource.
      Returns:
      resource method handler instances.
    • accept

      public void accept(ResourceModelVisitor visitor)
      Description copied from interface: ResourceModelComponent
      A component should call the visitor back with an appropriate visitor interface method to give it a chance to process.
      Specified by:
      accept in interface ResourceModelComponent
      Parameters:
      visitor - resource model visitor.
    • isExtended

      public boolean isExtended()
      Get the flag indicating whether the resource is extended.

      I.e. it is not part of the resource set that forms the REST API explicitly defined by the application developer (resource classes and instances returned from the Application subclass getters).

      Extended resource model components are helper components that are not part of the explicitly defined REST API of a JAX-RS application, instead they are generated by Jersey runtime. For example, extended resource model components include OPTIONS resource methods automatically generated by Jersey resource model processors or application.wadl resource API that exposes the application WADL descriptor.

      Returns:
      true if the resource is part of the application's extended REST API, false otherwise.
      Since:
      2.5.1
      See Also:
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getComponents

      public List<? extends ResourceModelComponent> getComponents()
      Description copied from interface: ResourceModelComponent
      Should return all existing resource model sub-components.
      Specified by:
      getComponents in interface ResourceModelComponent
      Returns:
      list of all sub-components