You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2023/02/26 13:25:49 UTC

[skywalking-java] branch main updated: Adapt Armeria's plugins to the latest version 1.22.x (#459)

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-java.git


The following commit(s) were added to refs/heads/main by this push:
     new e648ca2145 Adapt Armeria's plugins to the latest version 1.22.x (#459)
e648ca2145 is described below

commit e648ca2145db0717052a3dc3936171c76584b4c5
Author: weiyang.zhang <gg...@gmail.com>
AuthorDate: Sun Feb 26 21:25:43 2023 +0800

    Adapt Armeria's plugins to the latest version 1.22.x (#459)
---
 CHANGES.md                                         |  1 +
 .../apm-armeria-1.0.x-plugin/pom.xml               | 43 +++++++++++++
 .../armeria/AbstractArmeriaClientInterceptor.java} | 63 ++++++++++++------
 .../armeria/Armeria100ClientInterceptor.java       | 50 +++++++++++++++
 .../define/Armeria100ClientInstrumentation.java    | 75 ++++++++++++++++++++++
 .../src/main/resources/skywalking-plugin.def       |  4 +-
 .../apm-sdk-plugin/apm-armeria-plugins/pom.xml     | 39 +++++++++++
 .../armeria/Armeria085ServerInterceptor.java       |  7 +-
 apm-sniffer/apm-sdk-plugin/pom.xml                 |  1 +
 .../setup/service-agent/java-agent/Plugin-list.md  |  1 +
 .../service-agent/java-agent/Supported-list.md     |  2 +-
 .../apm/testcase/armeria/ServerApplication.java    |  7 +-
 .../armeria-0.96plus-scenario/support-version.list | 24 +++++++
 13 files changed, 286 insertions(+), 31 deletions(-)

diff --git a/CHANGES.md b/CHANGES.md
index da8a191f21..7898f75a83 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -17,6 +17,7 @@ Release Notes.
 * Fix OracleURLParser ignoring actual port when :SID is absent.
 * Change gRPC instrumentation point to fix plugin not working for server side.
 * Fix servicecomb plugin trace break.
+* Adapt Armeria's plugins to the latest version 1.22.x
 
 #### Documentation
 * Update docs of Tracing APIs, reorganize the API docs into six parts.
diff --git a/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/pom.xml
new file mode 100644
index 0000000000..4995f20941
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/pom.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>apm-armeria-plugins</artifactId>
+        <groupId>org.apache.skywalking</groupId>
+        <version>8.15.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>apm-armeria-1.0.x-plugin</artifactId>
+    <name>apm-armeria-1.0.x-plugin</name>
+
+    <packaging>jar</packaging>
+    <description>SkyWalking Agent Plugin for Armeria 1.0.x+</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.linecorp.armeria</groupId>
+            <artifactId>armeria</artifactId>
+            <version>1.0.0</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ServerInterceptor.java b/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/AbstractArmeriaClientInterceptor.java
similarity index 53%
copy from apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ServerInterceptor.java
copy to apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/AbstractArmeriaClientInterceptor.java
index 4f219503ee..840de227af 100644
--- a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ServerInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/AbstractArmeriaClientInterceptor.java
@@ -17,10 +17,11 @@
 
 package org.apache.skywalking.apm.plugin.armeria;
 
-import com.linecorp.armeria.common.DefaultHttpRequest;
-import com.linecorp.armeria.common.HttpHeaders;
+import com.linecorp.armeria.client.Clients;
+import com.linecorp.armeria.common.HttpMethod;
+import com.linecorp.armeria.common.HttpRequest;
+import com.linecorp.armeria.common.util.SafeCloseable;
 import io.netty.util.AsciiString;
-import java.lang.reflect.Method;
 import org.apache.skywalking.apm.agent.core.context.CarrierItem;
 import org.apache.skywalking.apm.agent.core.context.ContextCarrier;
 import org.apache.skywalking.apm.agent.core.context.ContextManager;
@@ -32,35 +33,55 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceM
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
 import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
 
-@SuppressWarnings("unused") // actually used
-public class Armeria085ServerInterceptor implements InstanceMethodsAroundInterceptor {
+import java.lang.reflect.Method;
+import java.net.URI;
+
+public abstract class AbstractArmeriaClientInterceptor implements InstanceMethodsAroundInterceptor {
+    private static final String KEY_SAFE_CLOSEABLE = "SAFE_CLOSEABLE";
+
+    protected abstract URI getUri(EnhancedInstance objInst);
+
+    protected abstract HttpMethod getHttpMethod(Object[] allArguments);
+
+    protected abstract String getPath(Object[] allArguments);
+
+    protected abstract HttpRequest getHttpRequest(Object[] allArguments);
+
     @Override
-    public void beforeMethod(final EnhancedInstance objInst, final Method method, final Object[] allArguments,
-                             final Class<?>[] argumentsTypes, final MethodInterceptResult result) {
+    public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, MethodInterceptResult result) {
+        URI uri = getUri(objInst);
+        HttpMethod httpMethod = getHttpMethod(allArguments);
+        String path = getPath(allArguments);
 
-        DefaultHttpRequest httpRequest = (DefaultHttpRequest) allArguments[1];
-        HttpHeaders headers = httpRequest.headers();
+        final ContextCarrier contextCarrier = new ContextCarrier();
+        final String remotePeer = uri.getPort() > 0 ? uri.getHost() + ":" + uri.getPort() : uri.getHost();
 
-        ContextCarrier carrier = new ContextCarrier();
-        for (CarrierItem item = carrier.items(); item.hasNext(); ) {
-            item = item.next();
-            item.setHeadValue(headers.get(AsciiString.of(item.getHeadKey())));
-        }
+        final AbstractSpan exitSpan = ContextManager.createExitSpan(path, contextCarrier, remotePeer);
+
+        exitSpan.setComponent(ComponentsDefine.ARMERIA);
+        exitSpan.setLayer(SpanLayer.HTTP);
+        Tags.HTTP.METHOD.set(exitSpan, httpMethod.name());
 
-        AbstractSpan entrySpan = ContextManager.createEntrySpan(httpRequest.path(), carrier);
-        entrySpan.setComponent(ComponentsDefine.ARMERIA);
-        entrySpan.setLayer(SpanLayer.HTTP);
-        entrySpan.setPeer(httpRequest.authority());
-        Tags.URL.set(entrySpan, httpRequest.path());
-        Tags.HTTP.METHOD.set(entrySpan, httpRequest.method().name());
+        ContextManager.getRuntimeContext().put(KEY_SAFE_CLOSEABLE, Clients.withHeaders(builder -> {
+            for (CarrierItem item = contextCarrier.items(); item.hasNext(); ) {
+                item = item.next();
+                builder.add(AsciiString.of(item.getHeadKey()), item.getHeadValue());
+            }
+        }));
     }
 
     @Override
     public Object afterMethod(final EnhancedInstance objInst, final Method method, final Object[] allArguments,
                               final Class<?>[] argumentsTypes, final Object ret) {
-        if (ContextManager.isActive()) {
+        HttpRequest req = getHttpRequest(allArguments);
+        if (req != null && ContextManager.isActive()) {
             ContextManager.stopSpan();
         }
+
+        SafeCloseable safeCloseable = ContextManager.getRuntimeContext().get(KEY_SAFE_CLOSEABLE, SafeCloseable.class);
+        if (safeCloseable != null) {
+            safeCloseable.close();
+        }
         return ret;
     }
 
diff --git a/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria100ClientInterceptor.java b/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria100ClientInterceptor.java
new file mode 100644
index 0000000000..6bed5f1d34
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria100ClientInterceptor.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.skywalking.apm.plugin.armeria;
+
+import com.linecorp.armeria.client.UserClient;
+import com.linecorp.armeria.common.HttpMethod;
+import com.linecorp.armeria.common.HttpRequest;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+
+import java.net.URI;
+
+public class Armeria100ClientInterceptor extends AbstractArmeriaClientInterceptor {
+
+    @Override
+    protected URI getUri(EnhancedInstance objInst) {
+        UserClient userClient = (UserClient) objInst;
+        return userClient.uri();
+    }
+
+    @Override
+    protected HttpMethod getHttpMethod(Object[] allArguments) {
+        return (HttpMethod) allArguments[2];
+    }
+
+    @Override
+    protected String getPath(Object[] allArguments) {
+        return (String) allArguments[3];
+    }
+
+    @Override
+    protected HttpRequest getHttpRequest(Object[] allArguments) {
+        return (HttpRequest) allArguments[6];
+    }
+
+}
diff --git a/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria100ClientInstrumentation.java b/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria100ClientInstrumentation.java
new file mode 100644
index 0000000000..be380ce4e7
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria100ClientInstrumentation.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.skywalking.apm.plugin.armeria.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
+import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+/**
+ * Instruments Armeria client 1.0.x
+ */
+public class Armeria100ClientInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+
+    private static final String ENHANCE_CLASS = "com.linecorp.armeria.client.UserClient";
+    private static final String INTERCEPTOR_CLASS = "org.apache.skywalking.apm.plugin.armeria.Armeria100ClientInterceptor";
+
+    @Override
+    protected ClassMatch enhanceClass() {
+        return byName(ENHANCE_CLASS);
+    }
+
+    @Override
+    public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+        return new ConstructorInterceptPoint[0];
+    }
+
+    @Override
+    public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+        return new InstanceMethodsInterceptPoint[] {
+                new InstanceMethodsInterceptPoint() {
+                    @Override
+                    public ElementMatcher<MethodDescription> getMethodsMatcher() {
+                        return named("execute").and(takesArgument(0, named("com.linecorp.armeria.common.SessionProtocol"))).and(takesArgument(1, named("com.linecorp.armeria.client.endpoint.EndpointGroup"))).and(takesArgument(2, named("com.linecorp.armeria.common.HttpMethod"))).and(takesArgument(3, named("java.lang.String"))).and(takesArgument(4, named("java.lang.String"))).and(takesArgument(5, named("java.lang.String")));
+                    }
+
+                    @Override
+                    public String getMethodsInterceptor() {
+                        return INTERCEPTOR_CLASS;
+                    }
+
+                    @Override
+                    public boolean isOverrideArgs() {
+                        return false;
+                    }
+                }
+        };
+    }
+
+    @Override
+    protected String[] witnessClasses() {
+        return new String[]{"com.linecorp.armeria.common.AbstractHttpHeadersBuilder"};
+    }
+}
diff --git a/test/plugin/scenarios/armeria-0.96plus-scenario/support-version.list b/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/src/main/resources/skywalking-plugin.def
similarity index 89%
copy from test/plugin/scenarios/armeria-0.96plus-scenario/support-version.list
copy to apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/src/main/resources/skywalking-plugin.def
index 0fbfc1d463..eb757ee8b4 100644
--- a/test/plugin/scenarios/armeria-0.96plus-scenario/support-version.list
+++ b/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/apm-armeria-1.0.x-plugin/src/main/resources/skywalking-plugin.def
@@ -14,6 +14,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-0.98.0
-0.97.0
-0.96.0
+armeria-100=org.apache.skywalking.apm.plugin.armeria.define.Armeria100ClientInstrumentation
\ No newline at end of file
diff --git a/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/pom.xml b/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/pom.xml
new file mode 100644
index 0000000000..e2bd0eb579
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/apm-armeria-plugins/pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>apm-sdk-plugin</artifactId>
+        <groupId>org.apache.skywalking</groupId>
+        <version>8.15.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>pom</packaging>
+    <artifactId>apm-armeria-plugins</artifactId>
+    <name>apm-armeria-plugins</name>
+
+    <modules>
+        <module>apm-armeria-1.0.x-plugin</module>
+    </modules>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <sdk.plugin.related.dir>/..</sdk.plugin.related.dir>
+    </properties>
+
+</project>
\ No newline at end of file
diff --git a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ServerInterceptor.java b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ServerInterceptor.java
index 4f219503ee..8a5f327965 100644
--- a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ServerInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ServerInterceptor.java
@@ -17,10 +17,9 @@
 
 package org.apache.skywalking.apm.plugin.armeria;
 
-import com.linecorp.armeria.common.DefaultHttpRequest;
 import com.linecorp.armeria.common.HttpHeaders;
+import com.linecorp.armeria.common.HttpRequest;
 import io.netty.util.AsciiString;
-import java.lang.reflect.Method;
 import org.apache.skywalking.apm.agent.core.context.CarrierItem;
 import org.apache.skywalking.apm.agent.core.context.ContextCarrier;
 import org.apache.skywalking.apm.agent.core.context.ContextManager;
@@ -32,13 +31,15 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceM
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
 import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
 
+import java.lang.reflect.Method;
+
 @SuppressWarnings("unused") // actually used
 public class Armeria085ServerInterceptor implements InstanceMethodsAroundInterceptor {
     @Override
     public void beforeMethod(final EnhancedInstance objInst, final Method method, final Object[] allArguments,
                              final Class<?>[] argumentsTypes, final MethodInterceptResult result) {
 
-        DefaultHttpRequest httpRequest = (DefaultHttpRequest) allArguments[1];
+        HttpRequest httpRequest = (HttpRequest) allArguments[1];
         HttpHeaders headers = httpRequest.headers();
 
         ContextCarrier carrier = new ContextCarrier();
diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml
index e5cddd3abd..d6c5434c10 100644
--- a/apm-sniffer/apm-sdk-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/pom.xml
@@ -127,6 +127,7 @@
         <module>nats-2.14.x-2.15.x-plugin</module>
         <module>jedis-plugins</module>
         <module>impala-jdbc-2.6.x-plugin</module>
+        <module>apm-armeria-plugins</module>
     </modules>
     <packaging>pom</packaging>
 
diff --git a/docs/en/setup/service-agent/java-agent/Plugin-list.md b/docs/en/setup/service-agent/java-agent/Plugin-list.md
index aeea1528c3..f19b227e8b 100644
--- a/docs/en/setup/service-agent/java-agent/Plugin-list.md
+++ b/docs/en/setup/service-agent/java-agent/Plugin-list.md
@@ -4,6 +4,7 @@
 - armeria-085
 - armeria-086
 - armeria-098
+- armeria-100
 - async-http-client-2.x
 - avro-1.x
 - brpc-java
diff --git a/docs/en/setup/service-agent/java-agent/Supported-list.md b/docs/en/setup/service-agent/java-agent/Supported-list.md
index 4b89738285..1bc0ada50a 100644
--- a/docs/en/setup/service-agent/java-agent/Supported-list.md
+++ b/docs/en/setup/service-agent/java-agent/Supported-list.md
@@ -59,7 +59,7 @@ metrics based on the tracing data.
   * [gRPC](https://github.com/grpc/grpc-java) 1.x
   * [Apache ServiceComb Java Chassis](https://github.com/apache/servicecomb-java-chassis) 1.x, 2.x
   * [SOFARPC](https://github.com/alipay/sofa-rpc) 5.4.0
-  * [Armeria](https://github.com/line/armeria) 0.63.0 -> 0.98.0
+  * [Armeria](https://github.com/line/armeria) 0.63.0 -> 1.22.0
   * [Apache Avro](http://avro.apache.org) 1.7.0 - 1.8.x
   * [Finagle](https://github.com/twitter/finagle) 6.44.0 -> 20.1.0  (6.25.0 -> 6.44.0 not tested)
   * [Brpc-Java](https://github.com/baidu/brpc-java) 2.3.7 -> 3.0.5
diff --git a/test/plugin/scenarios/armeria-0.96plus-scenario/src/main/java/org/apache/skywalking/apm/testcase/armeria/ServerApplication.java b/test/plugin/scenarios/armeria-0.96plus-scenario/src/main/java/org/apache/skywalking/apm/testcase/armeria/ServerApplication.java
index 93b7bfbe3a..7244f391cc 100644
--- a/test/plugin/scenarios/armeria-0.96plus-scenario/src/main/java/org/apache/skywalking/apm/testcase/armeria/ServerApplication.java
+++ b/test/plugin/scenarios/armeria-0.96plus-scenario/src/main/java/org/apache/skywalking/apm/testcase/armeria/ServerApplication.java
@@ -20,17 +20,18 @@ package org.apache.skywalking.apm.testcase.armeria;
 import com.linecorp.armeria.common.HttpResponse;
 import com.linecorp.armeria.server.Server;
 import com.linecorp.armeria.server.ServerBuilder;
-import java.util.concurrent.CompletableFuture;
-import javax.annotation.PostConstruct;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.PostConstruct;
+import java.util.concurrent.CompletableFuture;
+
 @Component
 public class ServerApplication {
     private static final String SUCCESS = "Success";
 
     @PostConstruct
     public void init() {
-        ServerBuilder sb = new ServerBuilder().http(8085)
+        ServerBuilder sb = Server.builder().http(8085)
                                               .service("/healthCheck", (ctx, res) -> HttpResponse.of(SUCCESS))
                                               .service("/greet/{name}", (ctx, res) -> HttpResponse.of("Hello %s~", ctx.pathParam("name")));
 
diff --git a/test/plugin/scenarios/armeria-0.96plus-scenario/support-version.list b/test/plugin/scenarios/armeria-0.96plus-scenario/support-version.list
index 0fbfc1d463..0a1e2fa466 100644
--- a/test/plugin/scenarios/armeria-0.96plus-scenario/support-version.list
+++ b/test/plugin/scenarios/armeria-0.96plus-scenario/support-version.list
@@ -14,6 +14,30 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+1.22.0
+1.21.0
+1.20.0
+1.19.0
+1.18.0
+1.17.0
+1.16.0
+1.15.0
+1.14.0
+1.13.0
+1.12.0
+1.11.0
+1.10.0
+1.9.0
+1.8.0
+1.7.0
+1.6.0
+1.5.0
+1.4.0
+1.3.0
+1.2.0
+1.1.0
+1.0.0
+0.99.0
 0.98.0
 0.97.0
 0.96.0