xref: /aosp_15_r20/external/opencensus-java/contrib/http_jaxrs/README.md (revision a24ffb47c3166327784aa05b149974e82e8f71b8)
1*a24ffb47SSadaf Ebrahimi# OpenCensus JAX-RS
2*a24ffb47SSadaf Ebrahimi[![Build Status][travis-image]][travis-url]
3*a24ffb47SSadaf Ebrahimi[![Windows Build Status][appveyor-image]][appveyor-url]
4*a24ffb47SSadaf Ebrahimi[![Maven Central][maven-image]][maven-url]
5*a24ffb47SSadaf Ebrahimi
6*a24ffb47SSadaf EbrahimiThe *OpenCensus JAX-RS for Java* is a container and client filter  for trace instrumentation when using JAX-RS for REST implementation in Java.
7*a24ffb47SSadaf Ebrahimi
8*a24ffb47SSadaf Ebrahimi## Quickstart
9*a24ffb47SSadaf Ebrahimi
10*a24ffb47SSadaf Ebrahimi### Add the dependencies to your project
11*a24ffb47SSadaf Ebrahimi
12*a24ffb47SSadaf EbrahimiFor Maven add to your `pom.xml`:
13*a24ffb47SSadaf Ebrahimi```xml
14*a24ffb47SSadaf Ebrahimi<dependencies>
15*a24ffb47SSadaf Ebrahimi  <dependency>
16*a24ffb47SSadaf Ebrahimi    <groupId>io.opencensus</groupId>
17*a24ffb47SSadaf Ebrahimi    <artifactId>opencensus-api</artifactId>
18*a24ffb47SSadaf Ebrahimi    <version>0.28.3</version>
19*a24ffb47SSadaf Ebrahimi  </dependency>
20*a24ffb47SSadaf Ebrahimi  <dependency>
21*a24ffb47SSadaf Ebrahimi    <groupId>io.opencensus</groupId>
22*a24ffb47SSadaf Ebrahimi    <artifactId>opencensus-contrib-http-jaxrs</artifactId>
23*a24ffb47SSadaf Ebrahimi    <version>0.28.3</version>
24*a24ffb47SSadaf Ebrahimi  </dependency>
25*a24ffb47SSadaf Ebrahimi</dependencies>
26*a24ffb47SSadaf Ebrahimi```
27*a24ffb47SSadaf Ebrahimi
28*a24ffb47SSadaf EbrahimiFor Gradle add to your dependencies:
29*a24ffb47SSadaf Ebrahimi```groovy
30*a24ffb47SSadaf Ebrahimicompile 'io.opencensus:opencensus-api:0.28.3'
31*a24ffb47SSadaf Ebrahimicompile 'io.opencensus:opencensus-contrib-http-jaxrs:0.28.3'
32*a24ffb47SSadaf Ebrahimi```
33*a24ffb47SSadaf Ebrahimi
34*a24ffb47SSadaf Ebrahimi### Usage
35*a24ffb47SSadaf Ebrahimi
36*a24ffb47SSadaf Ebrahimi#### Container Filter
37*a24ffb47SSadaf Ebrahimi
38*a24ffb47SSadaf EbrahimiThe container filter should be added to the JAX-RS `Application` class and endpoints should be annotated
39*a24ffb47SSadaf Ebrahimiwith `@Metrics` annotation.
40*a24ffb47SSadaf Ebrahimi
41*a24ffb47SSadaf Ebrahimi```java
42*a24ffb47SSadaf Ebrahimiclass MyApplication extends Application {
43*a24ffb47SSadaf Ebrahimi  @Override
44*a24ffb47SSadaf Ebrahimi  public Set<Class<?>> getClasses() {
45*a24ffb47SSadaf Ebrahimi      Set<Class<?>> providers = new HashSet<>(super.getClasses());
46*a24ffb47SSadaf Ebrahimi      providers.add(JaxrsContainerFilter.class);
47*a24ffb47SSadaf Ebrahimi      return providers;
48*a24ffb47SSadaf Ebrahimi  }
49*a24ffb47SSadaf Ebrahimi}
50*a24ffb47SSadaf Ebrahimi```
51*a24ffb47SSadaf Ebrahimi
52*a24ffb47SSadaf EbrahimiIt is possible to customize the filter by using the custom constructor. The below will
53*a24ffb47SSadaf Ebrahimiuse the `B3Format` for context propagation instead of the W3C text context format.
54*a24ffb47SSadaf Ebrahimi
55*a24ffb47SSadaf Ebrahimi```java
56*a24ffb47SSadaf Ebrahimiclass MyApplication extends Application {
57*a24ffb47SSadaf Ebrahimi  @Override
58*a24ffb47SSadaf Ebrahimi  public Set<Object> getSingletons() {
59*a24ffb47SSadaf Ebrahimi    Set<Object> singletons = new HashSet<>(super.getSingletons());
60*a24ffb47SSadaf Ebrahimi    singletons.add(new JaxrsContainerFilter(
61*a24ffb47SSadaf Ebrahimi        new JaxrsContainerExtractor(),
62*a24ffb47SSadaf Ebrahimi        Tracing.getPropagationComponent().getB3Format(),
63*a24ffb47SSadaf Ebrahimi        /* publicEndpoint= */ true));
64*a24ffb47SSadaf Ebrahimi    return singletons;
65*a24ffb47SSadaf Ebrahimi  }
66*a24ffb47SSadaf Ebrahimi}
67*a24ffb47SSadaf Ebrahimi```
68*a24ffb47SSadaf Ebrahimi
69*a24ffb47SSadaf Ebrahimi```java
70*a24ffb47SSadaf Ebrahimi@Metrics
71*a24ffb47SSadaf Ebrahimi@Path("/resource")
72*a24ffb47SSadaf Ebrahimiclass MyResource {
73*a24ffb47SSadaf Ebrahimi  @GET
74*a24ffb47SSadaf Ebrahimi  public Response resource() {
75*a24ffb47SSadaf Ebrahimi    ...
76*a24ffb47SSadaf Ebrahimi  }
77*a24ffb47SSadaf Ebrahimi}
78*a24ffb47SSadaf Ebrahimi```
79*a24ffb47SSadaf Ebrahimi
80*a24ffb47SSadaf EbrahimiThe annotation may also be applied on method level.
81*a24ffb47SSadaf Ebrahimi
82*a24ffb47SSadaf Ebrahimi#### Client Filter
83*a24ffb47SSadaf Ebrahimi
84*a24ffb47SSadaf EbrahimiFilter should be added to the `WebTarget` instance when using JAX-RS as client.
85*a24ffb47SSadaf Ebrahimi
86*a24ffb47SSadaf Ebrahimi```java
87*a24ffb47SSadaf EbrahimiWebTarget target = ClientBuilder.newClient().target("endpoint");
88*a24ffb47SSadaf Ebrahimitarget.register(JaxrsClientFilter.class);
89*a24ffb47SSadaf Ebrahimi```
90*a24ffb47SSadaf Ebrahimi
91*a24ffb47SSadaf EbrahimiIt is possible to customize the filter using the custom constructor. The
92*a24ffb47SSadaf Ebrahimibelow will use the `B3Format` for context propagation instead of the default W3C
93*a24ffb47SSadaf Ebrahimitext context format.
94*a24ffb47SSadaf Ebrahimi
95*a24ffb47SSadaf Ebrahimi```java
96*a24ffb47SSadaf EbrahimiWebTarget target = ClientBuilder.newClient().target("endpoint");
97*a24ffb47SSadaf Ebrahimitarget.register(new JaxrsClientFilter(
98*a24ffb47SSadaf Ebrahimi    new JaxrsContainerExtractor(),
99*a24ffb47SSadaf Ebrahimi    Tracing.getPropagationComponent().getB3Format()));
100*a24ffb47SSadaf Ebrahimi```
101*a24ffb47SSadaf Ebrahimi
102*a24ffb47SSadaf Ebrahimi
103*a24ffb47SSadaf Ebrahimi[travis-image]: https://travis-ci.org/census-instrumentation/opencensus-java.svg?branch=master
104*a24ffb47SSadaf Ebrahimi[travis-url]: https://travis-ci.org/census-instrumentation/opencensus-java
105*a24ffb47SSadaf Ebrahimi[appveyor-image]: https://ci.appveyor.com/api/projects/status/hxthmpkxar4jq4be/branch/master?svg=true
106*a24ffb47SSadaf Ebrahimi[appveyor-url]: https://ci.appveyor.com/project/opencensusjavateam/opencensus-java/branch/master
107*a24ffb47SSadaf Ebrahimi[maven-image]: https://maven-badges.herokuapp.com/maven-central/io.opencensus/opencensus-contrib-http-jetty-client/badge.svg
108*a24ffb47SSadaf Ebrahimi[maven-url]: https://maven-badges.herokuapp.com/maven-central/io.opencensus/opencensus-contrib-jetty-client
109