Skip to content

Commit dbf631d

Browse files
committed
pr review
1 parent f739aa0 commit dbf631d

File tree

3 files changed

+21
-94
lines changed

3 files changed

+21
-94
lines changed

instrumentation/spring/spring-web/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/v3_1/HeaderUtil.java

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,49 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
package io.opentelemetry.instrumentation.spring.webflux.v5_3;
6+
package io.opentelemetry.instrumentation.spring.web.v3_1;
77

88
import static java.util.Collections.emptyList;
9+
import static java.util.Objects.requireNonNull;
910

1011
import java.lang.invoke.MethodHandle;
1112
import java.lang.invoke.MethodHandles;
1213
import java.lang.invoke.MethodType;
1314
import java.util.List;
15+
import java.util.function.Supplier;
1416
import org.springframework.http.HttpHeaders;
1517

1618
class HeaderUtil {
1719
private static final MethodHandle GET_HEADERS;
1820

1921
static {
2022
GET_HEADERS =
21-
isSpring7OrNewer()
22-
? findGetHeadersMethod(MethodType.methodType(List.class, String.class))
23-
: findGetHeadersMethod(MethodType.methodType(List.class, Object.class));
23+
requireNonNullElseGet(
24+
findGetHeadersMethod(
25+
MethodType.methodType(List.class, String.class)), // since spring web 7.0
26+
() ->
27+
findGetHeadersMethod(
28+
MethodType.methodType(List.class, Object.class))); // before spring web 7.0
2429
}
2530

26-
private static boolean isSpring7OrNewer() {
27-
try {
28-
Class.forName("org.springframework.core.Nullness");
29-
return true;
30-
} catch (ClassNotFoundException e) {
31-
return false;
32-
}
31+
// copied from java.util.Objects in Java 9+
32+
private static <T> T requireNonNullElseGet(T obj, Supplier<? extends T> supplier) {
33+
return (obj != null)
34+
? obj
35+
: requireNonNull(requireNonNull(supplier, "supplier").get(), "supplier.get()");
3336
}
3437

3538
private static MethodHandle findGetHeadersMethod(MethodType methodType) {
3639
try {
3740
return MethodHandles.lookup().findVirtual(HttpHeaders.class, "get", methodType);
3841
} catch (Throwable t) {
39-
throw new IllegalStateException(t);
42+
return null;
4043
}
4144
}
4245

46+
// before spring web 7.0 HttpHeaders implements Map<String, List<String>>, this triggers
47+
// errorprone BadInstanceof warning since errorpone is not aware that this instanceof check does
48+
// not pass with spring web 7.0+
4349
@SuppressWarnings("unchecked") // casting MethodHandle.invoke result
4450
static List<String> getHeader(HttpHeaders headers, String name) {
4551
try {

instrumentation/spring/spring-web/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/v3_1/SpringWebHttpAttributesGetter.java

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,12 @@
55

66
package io.opentelemetry.instrumentation.spring.web.v3_1;
77

8-
import static java.util.Collections.emptyList;
9-
108
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesGetter;
119
import java.lang.invoke.MethodHandle;
1210
import java.lang.invoke.MethodHandles;
1311
import java.lang.invoke.MethodType;
1412
import java.util.List;
1513
import javax.annotation.Nullable;
16-
import org.springframework.http.HttpHeaders;
1714
import org.springframework.http.HttpRequest;
1815
import org.springframework.http.client.ClientHttpResponse;
1916

@@ -23,7 +20,6 @@ enum SpringWebHttpAttributesGetter
2320

2421
@Nullable private static final MethodHandle GET_STATUS_CODE;
2522
@Nullable private static final MethodHandle STATUS_CODE_VALUE;
26-
private static final MethodHandle GET_HEADERS;
2723

2824
static {
2925
MethodHandles.Lookup lookup = MethodHandles.publicLookup();
@@ -58,27 +54,6 @@ enum SpringWebHttpAttributesGetter
5854

5955
GET_STATUS_CODE = getStatusCode;
6056
STATUS_CODE_VALUE = statusCodeValue;
61-
GET_HEADERS =
62-
isSpring7OrNewer()
63-
? findGetHeadersMethod(MethodType.methodType(List.class, String.class))
64-
: findGetHeadersMethod(MethodType.methodType(List.class, Object.class));
65-
}
66-
67-
private static boolean isSpring7OrNewer() {
68-
try {
69-
Class.forName("org.springframework.core.Nullness");
70-
return true;
71-
} catch (ClassNotFoundException e) {
72-
return false;
73-
}
74-
}
75-
76-
private static MethodHandle findGetHeadersMethod(MethodType methodType) {
77-
try {
78-
return MethodHandles.lookup().findVirtual(HttpHeaders.class, "get", methodType);
79-
} catch (Throwable t) {
80-
return null;
81-
}
8257
}
8358

8459
@Override
@@ -94,20 +69,7 @@ public String getUrlFull(HttpRequest httpRequest) {
9469

9570
@Override
9671
public List<String> getHttpRequestHeader(HttpRequest httpRequest, String name) {
97-
return getHeader(httpRequest.getHeaders(), name);
98-
}
99-
100-
@SuppressWarnings("unchecked") // casting MethodHandle.invoke result
101-
static List<String> getHeader(HttpHeaders headers, String name) {
102-
try {
103-
List<String> result = (List<String>) GET_HEADERS.invoke(headers, name);
104-
if (result == null) {
105-
return emptyList();
106-
}
107-
return result;
108-
} catch (Throwable t) {
109-
throw new IllegalStateException(t);
110-
}
72+
return HeaderUtil.getHeader(httpRequest.getHeaders(), name);
11173
}
11274

11375
@Override
@@ -129,7 +91,7 @@ public Integer getHttpResponseStatusCode(
12991
@Override
13092
public List<String> getHttpResponseHeader(
13193
HttpRequest httpRequest, ClientHttpResponse clientHttpResponse, String name) {
132-
return getHeader(clientHttpResponse.getHeaders(), name);
94+
return HeaderUtil.getHeader(clientHttpResponse.getHeaders(), name);
13395
}
13496

13597
@Override

instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/internal/WebClientHttpAttributesGetter.java

Lines changed: 1 addition & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,9 @@
55

66
package io.opentelemetry.instrumentation.spring.webflux.v5_3.internal;
77

8-
import static java.util.Collections.emptyList;
9-
108
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesGetter;
11-
import java.lang.invoke.MethodHandle;
12-
import java.lang.invoke.MethodHandles;
13-
import java.lang.invoke.MethodType;
149
import java.util.List;
1510
import javax.annotation.Nullable;
16-
import org.springframework.http.HttpHeaders;
1711
import org.springframework.web.reactive.function.client.ClientRequest;
1812
import org.springframework.web.reactive.function.client.ClientResponse;
1913

@@ -25,32 +19,6 @@ public enum WebClientHttpAttributesGetter
2519
implements HttpClientAttributesGetter<ClientRequest, ClientResponse> {
2620
INSTANCE;
2721

28-
private static final MethodHandle GET_HEADERS;
29-
30-
static {
31-
GET_HEADERS =
32-
isSpring7OrNewer()
33-
? findGetHeadersMethod(MethodType.methodType(List.class, String.class))
34-
: findGetHeadersMethod(MethodType.methodType(List.class, Object.class));
35-
}
36-
37-
private static boolean isSpring7OrNewer() {
38-
try {
39-
Class.forName("org.springframework.core.Nullness");
40-
return true;
41-
} catch (ClassNotFoundException e) {
42-
return false;
43-
}
44-
}
45-
46-
private static MethodHandle findGetHeadersMethod(MethodType methodType) {
47-
try {
48-
return MethodHandles.lookup().findVirtual(HttpHeaders.class, "get", methodType);
49-
} catch (Throwable t) {
50-
throw new IllegalStateException(t);
51-
}
52-
}
53-
5422
@Override
5523
public String getUrlFull(ClientRequest request) {
5624
return request.url().toString();
@@ -62,17 +30,8 @@ public String getHttpRequestMethod(ClientRequest request) {
6230
}
6331

6432
@Override
65-
@SuppressWarnings("unchecked") // casting MethodHandle.invoke result
6633
public List<String> getHttpRequestHeader(ClientRequest request, String name) {
67-
try {
68-
List<String> result = (List<String>) GET_HEADERS.invoke(request.headers(), name);
69-
if (result == null) {
70-
return emptyList();
71-
}
72-
return result;
73-
} catch (Throwable t) {
74-
throw new IllegalStateException(t);
75-
}
34+
return HeaderUtil.getHeader(request.headers(), name);
7635
}
7736

7837
@Override

0 commit comments

Comments
 (0)