diff --git a/CHANGES.md b/CHANGES.md
index 623b5015f1..387d8ff0ff 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -22,6 +22,7 @@ Release Notes.
* Improve 4x performance of ContextManagerExtendService.createTraceContext()
* Add a plugin that supports the Solon framework.
* Fixed issues in the MySQL component where the executeBatch method could result in empty SQL statements .
+* Fix problem in the jetty-client-9.x which leading original listener reading empty content
All issues and pull requests are [here](https://github.com/apache/skywalking/milestone/213?closed=1)
diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml
index 8e091d09b2..1963d3fa6b 100644
--- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml
@@ -31,7 +31,7 @@
http://maven.apache.org
- 9.1.0.v20131115
+ 9.4.55.v20240627
diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/client/CompleteListenerWrapper.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/client/CompleteListenerWrapper.java
index 50697bf3e4..24074d922c 100644
--- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/client/CompleteListenerWrapper.java
+++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/client/CompleteListenerWrapper.java
@@ -25,9 +25,17 @@
import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
import org.eclipse.jetty.client.api.Response;
import org.eclipse.jetty.client.api.Result;
+import org.eclipse.jetty.http.HttpField;
+import org.eclipse.jetty.util.Callback;
+
+import java.nio.ByteBuffer;
+
+public class CompleteListenerWrapper implements
+ Response.BeginListener, Response.HeaderListener, Response.HeadersListener, Response.ContentListener,
+ Response.SuccessListener, Response.FailureListener, Response.CompleteListener, Response.AsyncContentListener {
-public class CompleteListenerWrapper implements Response.CompleteListener {
private Response.CompleteListener callback;
+
private ContextSnapshot context;
public CompleteListenerWrapper(Response.CompleteListener callback, ContextSnapshot context) {
@@ -48,4 +56,40 @@ public void onComplete(Result result) {
}
ContextManager.stopSpan();
}
+
+ @Override
+ public void onContent(Response response, ByteBuffer content) {
+ ((Response.ContentListener) callback).onContent(response, content);
+ }
+
+ @Override
+ public void onFailure(Response response, Throwable failure) {
+ ((Response.FailureListener) callback).onFailure(response, failure);
+ }
+
+ @Override
+ public void onSuccess(Response response) {
+ ((Response.SuccessListener) callback).onSuccess(response);
+ }
+
+ @Override
+ public void onBegin(Response response) {
+ ((Response.BeginListener) callback).onBegin(response);
+ }
+
+ @Override
+ public boolean onHeader(Response response, HttpField field) {
+ return ((Response.HeaderListener) callback).onHeader(response, field);
+
+ }
+
+ @Override
+ public void onHeaders(Response response) {
+ ((Response.HeadersListener) callback).onHeaders(response);
+ }
+
+ @Override
+ public void onContent(Response response, ByteBuffer content, Callback originalCallback) {
+ ((Response.AsyncContentListener) this.callback).onContent(response, content, originalCallback);
+ }
}
diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/AsyncHttpRequestSendInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/AsyncHttpRequestSendInterceptorTest.java
index ae3dc47db1..a2934b6194 100644
--- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/AsyncHttpRequestSendInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/AsyncHttpRequestSendInterceptorTest.java
@@ -33,6 +33,7 @@
import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
import org.eclipse.jetty.client.HttpClient;
+import org.eclipse.jetty.client.HttpConversation;
import org.eclipse.jetty.client.HttpRequest;
import org.eclipse.jetty.client.ResponseNotifier;
import org.eclipse.jetty.client.api.Response;
@@ -147,7 +148,7 @@ private void assertJettySpan() {
private class MockHttpRequest extends HttpRequest implements EnhancedInstance {
public MockHttpRequest(HttpClient httpClient, URI uri) {
- super(httpClient, uri);
+ super(httpClient, new HttpConversation(), uri);
}
@Override
@@ -173,7 +174,7 @@ public void setSkyWalkingDynamicField(Object value) {
private class MockResponseNotifier extends ResponseNotifier implements EnhancedInstance {
public MockResponseNotifier(HttpClient client) {
- super(client);
+ super();
}
@Override
diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/SyncHttpRequestSendInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/SyncHttpRequestSendInterceptorTest.java
index e4a861fbc7..19358b8af5 100644
--- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/SyncHttpRequestSendInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/SyncHttpRequestSendInterceptorTest.java
@@ -34,6 +34,7 @@
import org.apache.skywalking.apm.agent.test.tools.SpanAssert;
import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
import org.eclipse.jetty.client.HttpClient;
+import org.eclipse.jetty.client.HttpConversation;
import org.eclipse.jetty.client.HttpRequest;
import org.junit.Assert;
import org.junit.Before;
@@ -124,7 +125,7 @@ public void testMethodsAroundError() throws Throwable {
private class MockHttpRequest extends HttpRequest implements EnhancedInstance {
public MockHttpRequest(HttpClient httpClient, URI uri) {
- super(httpClient, uri);
+ super(httpClient, new HttpConversation(), uri);
}
@Override