diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/skywalking/apm/plugin/jetty/v9/server/HandleInterceptor.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/skywalking/apm/plugin/jetty/v9/server/HandleInterceptor.java
index 35633385ae2cd5e7e63da4d07b58413d7818e0ee..c94834d1c1e5446bb6ce92b71570cca79413cf43 100644
--- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/skywalking/apm/plugin/jetty/v9/server/HandleInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/skywalking/apm/plugin/jetty/v9/server/HandleInterceptor.java
@@ -21,6 +21,7 @@ package org.skywalking.apm.plugin.jetty.v9.server;
import java.lang.reflect.Method;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.eclipse.jetty.server.HttpChannel;
import org.skywalking.apm.agent.core.context.CarrierItem;
import org.skywalking.apm.agent.core.context.ContextCarrier;
import org.skywalking.apm.agent.core.context.ContextManager;
@@ -36,8 +37,8 @@ public class HandleInterceptor implements InstanceMethodsAroundInterceptor {
@Override
public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
MethodInterceptResult result) throws Throwable {
- String requestURI = (String)allArguments[0];
- HttpServletRequest servletRequest = (HttpServletRequest)allArguments[2];
+ HttpChannel httpChannel = (HttpChannel)allArguments[0];
+ HttpServletRequest servletRequest = httpChannel.getRequest();
ContextCarrier contextCarrier = new ContextCarrier();
@@ -47,7 +48,7 @@ public class HandleInterceptor implements InstanceMethodsAroundInterceptor {
next.setHeadValue(servletRequest.getHeader(next.getHeadKey()));
}
- AbstractSpan span = ContextManager.createEntrySpan(requestURI, contextCarrier);
+ AbstractSpan span = ContextManager.createEntrySpan(servletRequest.getRequestURI(), contextCarrier);
Tags.URL.set(span, servletRequest.getRequestURL().toString());
Tags.HTTP.METHOD.set(span, servletRequest.getMethod());
span.setComponent(ComponentsDefine.JETTY_SERVER);
@@ -57,7 +58,8 @@ public class HandleInterceptor implements InstanceMethodsAroundInterceptor {
@Override
public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
Object ret) throws Throwable {
- HttpServletResponse servletResponse = (HttpServletResponse)allArguments[3];
+ HttpChannel httpChannel = (HttpChannel)allArguments[0];
+ HttpServletResponse servletResponse = httpChannel.getResponse();
AbstractSpan span = ContextManager.activeSpan();
if (servletResponse.getStatus() >= 400) {
span.errorOccurred();
diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/skywalking/apm/plugin/jetty/v9/server/define/HandlerListInstrumentation.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/skywalking/apm/plugin/jetty/v9/server/define/JettyInstrumentation.java
similarity index 84%
rename from apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/skywalking/apm/plugin/jetty/v9/server/define/HandlerListInstrumentation.java
rename to apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/skywalking/apm/plugin/jetty/v9/server/define/JettyInstrumentation.java
index e2cf781f6bd88a565cbeae542c39f6d4cf15246d..0004ab160a09ea596899b0c2a0b95d9fb1c15ec0 100644
--- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/skywalking/apm/plugin/jetty/v9/server/define/HandlerListInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/skywalking/apm/plugin/jetty/v9/server/define/JettyInstrumentation.java
@@ -26,17 +26,18 @@ import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMet
import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
import static net.bytebuddy.matcher.ElementMatchers.named;
+import static org.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType;
import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
/**
- * {@link HandlerListInstrumentation} enhance the handle
method in org.eclipse.jetty.server.handler.HandlerList
+ * {@link JettyInstrumentation} enhance the handle
method in org.eclipse.jetty.server.handler.HandlerList
* by org.skywalking.apm.plugin.jetty.v9.server.HandleInterceptor
*
* @author zhangxin
*/
-public class HandlerListInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+public class JettyInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
- private static final String ENHANCE_CLASS = "org.eclipse.jetty.server.handler.HandlerList";
+ private static final String ENHANCE_CLASS = "org.eclipse.jetty.server.Server";
private static final String ENHANCE_METHOD = "handle";
private static final String INTERCEPTOR_CLASS = "org.skywalking.apm.plugin.jetty.v9.server.HandleInterceptor";
@@ -48,7 +49,7 @@ public class HandlerListInstrumentation extends ClassInstanceMethodsEnhancePlugi
return new InstanceMethodsInterceptPoint[] {
new InstanceMethodsInterceptPoint() {
@Override public ElementMatcher getMethodsMatcher() {
- return named(ENHANCE_METHOD);
+ return named(ENHANCE_METHOD).and(takesArgumentWithType(0, "org.eclipse.jetty.server.HttpChannel"));
}
@Override public String getMethodsInterceptor() {
diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/resources/skywalking-plugin.def
index 0c7fcd02d88b9762bbea92a0af964680554e4e4a..053c257c2ebf83a7accbd7851739b555361e3979 100644
--- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/resources/skywalking-plugin.def
+++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/resources/skywalking-plugin.def
@@ -1 +1 @@
-jetty-server-9.x=org.skywalking.apm.plugin.jetty.v9.server.define.HandlerListInstrumentation
+jetty-server-9.x=org.skywalking.apm.plugin.jetty.v9.server.define.JettyInstrumentation
diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/test/java/org/skywalking/apm/plugin/jetty/v9/server/HandleInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/test/java/org/skywalking/apm/plugin/jetty/v9/server/HandleInterceptorTest.java
index bbc59cbc7cdaca943f15b963876a18b76d1bdef8..089a565ccb51410b39c3040747975b374c7dc104 100644
--- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/test/java/org/skywalking/apm/plugin/jetty/v9/server/HandleInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/test/java/org/skywalking/apm/plugin/jetty/v9/server/HandleInterceptorTest.java
@@ -19,9 +19,9 @@
package org.skywalking.apm.plugin.jetty.v9.server;
import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import org.eclipse.jetty.server.HttpChannel;
import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.Response;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -58,7 +58,7 @@ import static org.skywalking.apm.agent.test.tools.SpanAssert.assertTag;
@PowerMockRunnerDelegate(TracingSegmentRunner.class)
public class HandleInterceptorTest {
- private HandleInterceptor tomcatInvokeInterceptor;
+ private HandleInterceptor jettyInvokeInterceptor;
@SegmentStoragePoint
private SegmentStorage segmentStorage;
@@ -66,36 +66,39 @@ public class HandleInterceptorTest {
public AgentServiceRule serviceRule = new AgentServiceRule();
@Mock
- private HttpServletRequest request;
+ private Request request;
@Mock
- private Request baseRequest;
- @Mock
- private HttpServletResponse response;
+ private Response response;
@Mock
private MethodInterceptResult methodInterceptResult;
@Mock
private EnhancedInstance enhancedInstance;
+ @Mock
+ private HttpChannel httpChannel;
+
private Object[] arguments;
private Class[] argumentType;
@Before
public void setUp() throws Exception {
- tomcatInvokeInterceptor = new HandleInterceptor();
+ jettyInvokeInterceptor = new HandleInterceptor();
when(request.getRequestURI()).thenReturn("/test/testRequestURL");
when(request.getRequestURL()).thenReturn(new StringBuffer("http://localhost:8080/test/testRequestURL"));
when(response.getStatus()).thenReturn(200);
- arguments = new Object[] {"/test/testRequestURL", baseRequest, request, response};
- argumentType = new Class[] {String.class, baseRequest.getClass(), request.getClass(), response.getClass()};
+ when(httpChannel.getResponse()).thenReturn(response);
+ when(httpChannel.getRequest()).thenReturn(request);
+ arguments = new Object[] {httpChannel};
+ argumentType = new Class[] {httpChannel.getClass()};
}
@Test
public void testWithoutSerializedContextData() throws Throwable {
- tomcatInvokeInterceptor.beforeMethod(enhancedInstance, null, arguments, argumentType, methodInterceptResult);
- tomcatInvokeInterceptor.afterMethod(enhancedInstance, null, arguments, argumentType, null);
+ jettyInvokeInterceptor.beforeMethod(enhancedInstance, null, arguments, argumentType, methodInterceptResult);
+ jettyInvokeInterceptor.afterMethod(enhancedInstance, null, arguments, argumentType, null);
assertThat(segmentStorage.getTraceSegments().size(), is(1));
TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);
@@ -107,8 +110,8 @@ public class HandleInterceptorTest {
public void testWithSerializedContextData() throws Throwable {
when(request.getHeader(SW3CarrierItem.HEADER_NAME)).thenReturn("1.234.111|3|1|1|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*");
- tomcatInvokeInterceptor.beforeMethod(enhancedInstance, null, arguments, argumentType, methodInterceptResult);
- tomcatInvokeInterceptor.afterMethod(enhancedInstance, null, arguments, argumentType, null);
+ jettyInvokeInterceptor.beforeMethod(enhancedInstance, null, arguments, argumentType, methodInterceptResult);
+ jettyInvokeInterceptor.afterMethod(enhancedInstance, null, arguments, argumentType, null);
assertThat(segmentStorage.getTraceSegments().size(), is(1));
TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);
@@ -120,9 +123,9 @@ public class HandleInterceptorTest {
@Test
public void testWithOccurException() throws Throwable {
- tomcatInvokeInterceptor.beforeMethod(enhancedInstance, null, arguments, argumentType, methodInterceptResult);
- tomcatInvokeInterceptor.handleMethodException(enhancedInstance, null, arguments, argumentType, new RuntimeException());
- tomcatInvokeInterceptor.afterMethod(enhancedInstance, null, arguments, argumentType, null);
+ jettyInvokeInterceptor.beforeMethod(enhancedInstance, null, arguments, argumentType, methodInterceptResult);
+ jettyInvokeInterceptor.handleMethodException(enhancedInstance, null, arguments, argumentType, new RuntimeException());
+ jettyInvokeInterceptor.afterMethod(enhancedInstance, null, arguments, argumentType, null);
assertThat(segmentStorage.getTraceSegments().size(), is(1));
TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);