Skip to content

Commit 657d6e4

Browse files
jetty-httpclient-12: send method must pass along implemented response listeners
The super HttpRequest.send call says: > The listener passed to this method may implement not only Response.CompleteListener > but also other response listener interfaces, and all the events implemented will be notified. The current implementation passes through a lambda that implements CompleteListener only, and does not delegate-in-scope to any other callback methods you might provide
1 parent e4752ab commit 657d6e4

File tree

1 file changed

+83
-3
lines changed
  • instrumentation/jetty-httpclient/jetty-httpclient-12.0/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v12_0

1 file changed

+83
-3
lines changed

instrumentation/jetty-httpclient/jetty-httpclient-12.0/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v12_0/TracingHttpRequest.java

+83-3
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@
1414
import org.eclipse.jetty.client.HttpClient;
1515
import org.eclipse.jetty.client.Request;
1616
import org.eclipse.jetty.client.Response;
17+
import org.eclipse.jetty.client.Result;
1718
import org.eclipse.jetty.client.transport.HttpConversation;
1819
import org.eclipse.jetty.client.transport.HttpRequest;
20+
import org.eclipse.jetty.http.HttpField;
21+
import org.eclipse.jetty.io.Content.Chunk;
22+
import org.eclipse.jetty.io.Content.Source;
1923

2024
class TracingHttpRequest extends HttpRequest {
2125

@@ -37,9 +41,85 @@ public void send(Response.CompleteListener listener) {
3741
// start span and attach listeners.
3842
JettyClientTracingListener.handleRequest(parentContext, this, instrumenter);
3943
super.send(
40-
result -> {
41-
try (Scope scope = openScope()) {
42-
listener.onComplete(result);
44+
new Response.Listener() {
45+
@Override
46+
public void onBegin(Response response) {
47+
if (listener instanceof Response.BeginListener l) {
48+
try (Scope scope = openScope()) {
49+
l.onBegin(response);
50+
}
51+
}
52+
}
53+
54+
@Override
55+
public void onComplete(Result result) {
56+
try (Scope scope = openScope()) {
57+
listener.onComplete(result);
58+
}
59+
}
60+
61+
@Override
62+
public void onContent(Response response, ByteBuffer content) {
63+
if (listener instanceof Response.ContentListener l) {
64+
try (Scope scope = openScope()) {
65+
l.onContent(response, content);
66+
}
67+
}
68+
}
69+
70+
@Override
71+
public void onContent(Response response, Chunk chunk, Runnable demander) {
72+
if (listener instanceof Response.AsyncContentListener l) {
73+
try (Scope scope = openScope()) {
74+
l.onContent(response, chunk, demander);
75+
}
76+
}
77+
}
78+
79+
@Override
80+
public void onContentSource(Response response, Source contentSource) {
81+
if (listener instanceof Response.ContentSourceListener l) {
82+
try (Scope scope = openScope()) {
83+
l.onContentSource(response, contentSource);
84+
}
85+
}
86+
}
87+
88+
@Override
89+
public void onFailure(Response response, Throwable failure) {
90+
if (listener instanceof Response.FailureListener l) {
91+
try (Scope scope = openScope()) {
92+
l.onFailure(response, failure);
93+
}
94+
}
95+
}
96+
97+
@Override
98+
public void onHeaders(Response response) {
99+
if (listener instanceof Response.HeadersListener l) {
100+
try (Scope scope = openScope()) {
101+
l.onHeaders(response);
102+
}
103+
}
104+
}
105+
106+
@Override
107+
public boolean onHeader(Response response, HttpField field) {
108+
if (listener instanceof Response.HeaderListener l) {
109+
try (Scope scope = openScope()) {
110+
return l.onHeader(response, field);
111+
}
112+
}
113+
return true;
114+
}
115+
116+
@Override
117+
public void onSuccess(Response response) {
118+
if (listener instanceof Response.SuccessListener l) {
119+
try (Scope scope = openScope()) {
120+
l.onSuccess(response);
121+
}
122+
}
43123
}
44124
});
45125
}

0 commit comments

Comments
 (0)