Using @Context in JAX-RS [ part 1 ]

JAX-RS provides the @Context annotation to inject a variety of resources in your RESTful services. Some of the most commonly injected components are HTTP headers, HTTP URI related information. Here is a complete list (in no specific order)

  • HTTP headers
  • HTTP URI details
  • Security Context
  • Resource Context
  • Request
  • Configuration
  • Application
  • Providers

Lets look at these one by one with the help of examples

HTTP headers

Although HTTP headers can be injected using the @HeaderParam annotation, JAX-RS also provides the facility of injecting an instance of the HttpHeaders interface (as an instance variable or method parameter). This is useful when you want to iterate over all possible headers rather than injecting a specific header value by name

HTTP URI details

UriInfo is another interface whose instance can be injected by JAX-RS (as an instance variable or method parameter). Use this instance to fetch additional details related to the request URI and its parameters (query, path)


An instance of the Providers interface can be injected using @Context. One needs to be aware of the fact that this is only valid within an existing provider. A Providers instance enables the current Provider to search for other registered providers in the current JAX-RS container.

Note: Please do not get confused between Provider and Providers.


  • A JAX-RS Provider is a is generic term for any class which supplements/extends the JAX-RS features by implementing standard interfaces exposed by the JAX-RS specification
  • It is annotated using the @Provider annotation for automatic discovery by the run time
  • Examples of JAX-RS providers are – Message Body Reader, Message Body Writer, Exception Mapper and Context Providers.


Refers to the (injectable) interface which was discussed in this sub section

Security Context

Inject an instance of the interface (as an instance variable or method parameter) if you want to gain more insight into identity of the entity invoking your RESTful service. This interface exposes the following information

  • Instance of representing the caller
  • Whether or not the user if a part of a specific role
  • Which authentication scheme is being used (BASIC/FORM/DIGEST/CERT)
  • Whether or not the request invoked over HTTPS

That’s all for this part. Rest of the injectables will be covered in the next iteration.

Until then.. Cheers!

About Abhishek

Currently working as a Senior Product Manager in the Oracle Cloud Application Development team with a focus on Oracle Cloud PaaS portfolio. When not hovering in the clouds, I stay grounded with Java EE
This entry was posted in Java, Java EE and tagged , , , . Bookmark the permalink.

5 Responses to Using @Context in JAX-RS [ part 1 ]

  1. Pingback: JavaWeekly 19/15: Jigsaw, Java8 concurrency, vJUG book club

  2. Pingback: Part 1: Using @Context in JAX-RS | Dinesh Ram Kali.

  3. Thanks, nice tip. But could we use @Inject instead of @Context?


    • Abhishek says:

      Glad you like the content. From what I know, its not possible to use @Inject for these items. Better alignment with CDI is a theme for Java EE 8 in general and the same applies for JAX-RS 2.1 (part of Java EE 8). Having said that, CDI works fine with JAX-RS 2.0 in general e.g. injection of simple managed beans. It’s just that injection of the components mentioned in this post are best done using @Context (as of now)


      • Thanks for the answer! Since @Context doesn’t need to specify any extra parameters, It’s good if we could inject in general way using @Inject. I hope it will be possible in future version of JAX-RS.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s