From fad74c9f21d5f63312a83ca33c692437969f7645 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A1=E1=86=BC=E1=84=8C=E1=85=AE=E1=86=AB?= =?UTF-8?q?=E1=84=8B=E1=85=A7=E1=86=BC=28Junyeong=20Jang=29/Core=E1=84=91?= =?UTF-8?q?=E1=85=B3=E1=86=AF=E1=84=85=E1=85=A2=E1=86=BA=E1=84=91=E1=85=A9?= =?UTF-8?q?=E1=86=B7=E1=84=80=E1=85=A2=E1=84=87=E1=85=A1=E1=86=AF=E1=84=90?= =?UTF-8?q?=E1=85=B5=E1=86=B7/11ST?= Date: Mon, 22 May 2023 13:27:01 +0900 Subject: [PATCH 1/6] feat: cast to byte instread of char, change body field type (String -> byte[]) --- .../apisix/plugin/runner/handler/RpcCallHandler.java | 5 +++-- .../apisix/plugin/runner/handler/ExtraInfoTest.java | 3 ++- .../apache/apisix/plugin/runner/ExtraInfoResponse.java | 8 ++++---- .../org/apache/apisix/plugin/runner/HttpRequest.java | 9 +++++---- .../org/apache/apisix/plugin/runner/PostRequest.java | 9 +++++---- .../plugin/runner/filter/PostReqWithVarsFilter.java | 3 ++- .../plugin/runner/filter/RewriteRequestDemoFilter.java | 3 ++- 7 files changed, 23 insertions(+), 17 deletions(-) diff --git a/runner-core/src/main/java/org/apache/apisix/plugin/runner/handler/RpcCallHandler.java b/runner-core/src/main/java/org/apache/apisix/plugin/runner/handler/RpcCallHandler.java index ed5ff040..8ea6b642 100644 --- a/runner-core/src/main/java/org/apache/apisix/plugin/runner/handler/RpcCallHandler.java +++ b/runner-core/src/main/java/org/apache/apisix/plugin/runner/handler/RpcCallHandler.java @@ -17,6 +17,7 @@ package org.apache.apisix.plugin.runner.handler; +import java.nio.charset.StandardCharsets; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -215,7 +216,7 @@ private void doPostFilter(ChannelHandlerContext ctx) { } private void handleExtraInfo(ChannelHandlerContext ctx, ExtraInfoResponse request) { - String result = request.getResult(); + byte[] result = request.getResult(); String varsKey = queue.poll(); if (Objects.isNull(varsKey)) { logger.error("queue is empty"); @@ -233,7 +234,7 @@ private void handleExtraInfo(ChannelHandlerContext ctx, ExtraInfoResponse reques } } else { - nginxVars.put(varsKey, result); + nginxVars.put(varsKey, new String(result, StandardCharsets.UTF_8)); } if (queue.isEmpty()) { diff --git a/runner-core/src/test/java/org/apache/apisix/plugin/runner/handler/ExtraInfoTest.java b/runner-core/src/test/java/org/apache/apisix/plugin/runner/handler/ExtraInfoTest.java index fafc4e48..840f898a 100644 --- a/runner-core/src/test/java/org/apache/apisix/plugin/runner/handler/ExtraInfoTest.java +++ b/runner-core/src/test/java/org/apache/apisix/plugin/runner/handler/ExtraInfoTest.java @@ -42,6 +42,7 @@ import java.io.ByteArrayOutputStream; import java.io.PrintStream; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -114,7 +115,7 @@ public String name() { @Override public void filter(HttpRequest request, HttpResponse response, PluginFilterChain chain) { - String body = request.getBody(); + String body = request.getBody(StandardCharsets.UTF_8); String content_type = request.getVars("content_type"); System.out.println("content_type: " + content_type); System.out.println("body: " + body); diff --git a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/ExtraInfoResponse.java b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/ExtraInfoResponse.java index eb10f975..7839afb1 100644 --- a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/ExtraInfoResponse.java +++ b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/ExtraInfoResponse.java @@ -35,12 +35,12 @@ public static ExtraInfoResponse from(ByteBuffer buffer) { return new ExtraInfoResponse(req); } - public String getResult() { - StringBuilder builder = new StringBuilder(); + public byte[] getResult() { + byte[] byteArray = new byte[this.resp.resultLength()]; for (int i = 0; i < this.resp.resultLength(); i++) { - builder.append((char) this.resp.result(i)); + byteArray[i] = (byte) this.resp.result(i); } - return builder.toString(); + return byteArray; } @Override diff --git a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/HttpRequest.java b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/HttpRequest.java index 896a9118..d7e89f04 100644 --- a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/HttpRequest.java +++ b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/HttpRequest.java @@ -24,6 +24,7 @@ import org.springframework.util.StringUtils; import java.nio.ByteBuffer; +import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -50,7 +51,7 @@ public class HttpRequest implements A6Request { private Map vars; - private String body; + private byte[] body; public HttpRequest(Req req) { this.req = req; @@ -299,11 +300,11 @@ public void setVars(Map vars) { this.vars = vars; } - public String getBody() { - return body; + public String getBody(Charset charset) { + return new String(body, charset); } - public void setBody(String body) { + public void setBody(byte[] body) { this.body = body; } diff --git a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostRequest.java b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostRequest.java index ba4179ad..cfe0a261 100644 --- a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostRequest.java +++ b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostRequest.java @@ -23,6 +23,7 @@ import org.springframework.util.CollectionUtils; import java.nio.ByteBuffer; +import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -38,7 +39,7 @@ public class PostRequest implements A6Request { private Integer status; - private String body; + private byte[] body; private Map vars; @@ -93,12 +94,12 @@ public Integer getUpstreamStatusCode() { return status; } - public void setBody(String body) { + public void setBody(byte[] body) { this.body = body; } - public String getBody() { - return body; + public String getBody(Charset charset) { + return new String(body, charset); } public String getVars(String key) { diff --git a/sample/src/main/java/org/apache/apisix/plugin/runner/filter/PostReqWithVarsFilter.java b/sample/src/main/java/org/apache/apisix/plugin/runner/filter/PostReqWithVarsFilter.java index 54ecf854..fadaa03f 100644 --- a/sample/src/main/java/org/apache/apisix/plugin/runner/filter/PostReqWithVarsFilter.java +++ b/sample/src/main/java/org/apache/apisix/plugin/runner/filter/PostReqWithVarsFilter.java @@ -24,6 +24,7 @@ import org.apache.apisix.plugin.runner.PostResponse; import org.springframework.stereotype.Component; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -52,7 +53,7 @@ public void postFilter(PostRequest request, PostResponse response, PluginFilterC Gson gson = new Gson(); Map conf = new HashMap<>(); conf = gson.fromJson(configStr, conf.getClass()); - String bodyStr = request.getBody(); + String bodyStr = request.getBody(StandardCharsets.UTF_8); Map body = new HashMap<>(); body = gson.fromJson(bodyStr, body.getClass()); assert body.get("url").toString().endsWith((String) conf.get("rewrite_path")); diff --git a/sample/src/main/java/org/apache/apisix/plugin/runner/filter/RewriteRequestDemoFilter.java b/sample/src/main/java/org/apache/apisix/plugin/runner/filter/RewriteRequestDemoFilter.java index e0027f0a..c4fa578f 100644 --- a/sample/src/main/java/org/apache/apisix/plugin/runner/filter/RewriteRequestDemoFilter.java +++ b/sample/src/main/java/org/apache/apisix/plugin/runner/filter/RewriteRequestDemoFilter.java @@ -22,6 +22,7 @@ import org.apache.apisix.plugin.runner.HttpResponse; import org.springframework.stereotype.Component; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -92,7 +93,7 @@ public void filter(HttpRequest request, HttpResponse response, PluginFilterChain */ String remoteAddr = request.getVars("remote_addr"); String serverPort = request.getVars("server_port"); - String body = request.getBody(); + String body = request.getBody(StandardCharsets.UTF_8); chain.filter(request, response); } From 93f87f4fb91c60efcae4240bc5a35598d7db6e7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A1=E1=86=BC=E1=84=8C=E1=85=AE=E1=86=AB?= =?UTF-8?q?=E1=84=8B=E1=85=A7=E1=86=BC=28Junyeong=20Jang=29/Core=E1=84=91?= =?UTF-8?q?=E1=85=B3=E1=86=AF=E1=84=85=E1=85=A2=E1=86=BA=E1=84=91=E1=85=A9?= =?UTF-8?q?=E1=86=B7=E1=84=80=E1=85=A2=E1=84=87=E1=85=A1=E1=86=AF=E1=84=90?= =?UTF-8?q?=E1=85=B5=E1=86=B7/11ST?= Date: Mon, 22 May 2023 19:17:38 +0900 Subject: [PATCH 2/6] feat: add getBody method for backward compatibility --- .../apache/apisix/plugin/runner/handler/RpcCallHandler.java | 3 +-- .../java/org/apache/apisix/plugin/runner/HttpRequest.java | 4 ++++ .../java/org/apache/apisix/plugin/runner/PostRequest.java | 4 ++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/runner-core/src/main/java/org/apache/apisix/plugin/runner/handler/RpcCallHandler.java b/runner-core/src/main/java/org/apache/apisix/plugin/runner/handler/RpcCallHandler.java index 8ea6b642..f054ccfe 100644 --- a/runner-core/src/main/java/org/apache/apisix/plugin/runner/handler/RpcCallHandler.java +++ b/runner-core/src/main/java/org/apache/apisix/plugin/runner/handler/RpcCallHandler.java @@ -17,7 +17,6 @@ package org.apache.apisix.plugin.runner.handler; -import java.nio.charset.StandardCharsets; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -234,7 +233,7 @@ private void handleExtraInfo(ChannelHandlerContext ctx, ExtraInfoResponse reques } } else { - nginxVars.put(varsKey, new String(result, StandardCharsets.UTF_8)); + nginxVars.put(varsKey, new String(result)); } if (queue.isEmpty()) { diff --git a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/HttpRequest.java b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/HttpRequest.java index d7e89f04..96f9c475 100644 --- a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/HttpRequest.java +++ b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/HttpRequest.java @@ -300,6 +300,10 @@ public void setVars(Map vars) { this.vars = vars; } + public String getBody() { + return new String(body); + } + public String getBody(Charset charset) { return new String(body, charset); } diff --git a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostRequest.java b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostRequest.java index cfe0a261..61179b19 100644 --- a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostRequest.java +++ b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostRequest.java @@ -98,6 +98,10 @@ public void setBody(byte[] body) { this.body = body; } + public String getBody() { + return new String(body); + } + public String getBody(Charset charset) { return new String(body, charset); } From 88e9ff9d623f849eedd514310d7b831e23734224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A1=E1=86=BC=E1=84=8C=E1=85=AE=E1=86=AB?= =?UTF-8?q?=E1=84=8B=E1=85=A7=E1=86=BC=28Junyeong=20Jang=29/Core=E1=84=91?= =?UTF-8?q?=E1=85=B3=E1=86=AF=E1=84=85=E1=85=A2=E1=86=BA=E1=84=91=E1=85=A9?= =?UTF-8?q?=E1=86=B7=E1=84=80=E1=85=A2=E1=84=87=E1=85=A1=E1=86=AF=E1=84=90?= =?UTF-8?q?=E1=85=B5=E1=86=B7/11ST?= Date: Mon, 22 May 2023 19:18:52 +0900 Subject: [PATCH 3/6] feat: apply getBody() --- .../org/apache/apisix/plugin/runner/handler/ExtraInfoTest.java | 3 +-- .../apisix/plugin/runner/filter/PostReqWithVarsFilter.java | 2 +- .../apisix/plugin/runner/filter/RewriteRequestDemoFilter.java | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/runner-core/src/test/java/org/apache/apisix/plugin/runner/handler/ExtraInfoTest.java b/runner-core/src/test/java/org/apache/apisix/plugin/runner/handler/ExtraInfoTest.java index 840f898a..fafc4e48 100644 --- a/runner-core/src/test/java/org/apache/apisix/plugin/runner/handler/ExtraInfoTest.java +++ b/runner-core/src/test/java/org/apache/apisix/plugin/runner/handler/ExtraInfoTest.java @@ -42,7 +42,6 @@ import java.io.ByteArrayOutputStream; import java.io.PrintStream; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -115,7 +114,7 @@ public String name() { @Override public void filter(HttpRequest request, HttpResponse response, PluginFilterChain chain) { - String body = request.getBody(StandardCharsets.UTF_8); + String body = request.getBody(); String content_type = request.getVars("content_type"); System.out.println("content_type: " + content_type); System.out.println("body: " + body); diff --git a/sample/src/main/java/org/apache/apisix/plugin/runner/filter/PostReqWithVarsFilter.java b/sample/src/main/java/org/apache/apisix/plugin/runner/filter/PostReqWithVarsFilter.java index fadaa03f..45307d57 100644 --- a/sample/src/main/java/org/apache/apisix/plugin/runner/filter/PostReqWithVarsFilter.java +++ b/sample/src/main/java/org/apache/apisix/plugin/runner/filter/PostReqWithVarsFilter.java @@ -53,7 +53,7 @@ public void postFilter(PostRequest request, PostResponse response, PluginFilterC Gson gson = new Gson(); Map conf = new HashMap<>(); conf = gson.fromJson(configStr, conf.getClass()); - String bodyStr = request.getBody(StandardCharsets.UTF_8); + String bodyStr = request.getBody(); Map body = new HashMap<>(); body = gson.fromJson(bodyStr, body.getClass()); assert body.get("url").toString().endsWith((String) conf.get("rewrite_path")); diff --git a/sample/src/main/java/org/apache/apisix/plugin/runner/filter/RewriteRequestDemoFilter.java b/sample/src/main/java/org/apache/apisix/plugin/runner/filter/RewriteRequestDemoFilter.java index c4fa578f..e0027f0a 100644 --- a/sample/src/main/java/org/apache/apisix/plugin/runner/filter/RewriteRequestDemoFilter.java +++ b/sample/src/main/java/org/apache/apisix/plugin/runner/filter/RewriteRequestDemoFilter.java @@ -22,7 +22,6 @@ import org.apache.apisix.plugin.runner.HttpResponse; import org.springframework.stereotype.Component; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -93,7 +92,7 @@ public void filter(HttpRequest request, HttpResponse response, PluginFilterChain */ String remoteAddr = request.getVars("remote_addr"); String serverPort = request.getVars("server_port"); - String body = request.getBody(StandardCharsets.UTF_8); + String body = request.getBody(); chain.filter(request, response); } From 92da795f91a5e3122835f2f6413ca4563b7fac1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A1=E1=86=BC=E1=84=8C=E1=85=AE=E1=86=AB?= =?UTF-8?q?=E1=84=8B=E1=85=A7=E1=86=BC=28Junyeong=20Jang=29/Core=E1=84=91?= =?UTF-8?q?=E1=85=B3=E1=86=AF=E1=84=85=E1=85=A2=E1=86=BA=E1=84=91=E1=85=A9?= =?UTF-8?q?=E1=86=B7=E1=84=80=E1=85=A2=E1=84=87=E1=85=A1=E1=86=AF=E1=84=90?= =?UTF-8?q?=E1=85=B5=E1=86=B7/11ST?= Date: Mon, 22 May 2023 19:21:47 +0900 Subject: [PATCH 4/6] feat: add setBody method for backward compatibility --- .../java/org/apache/apisix/plugin/runner/HttpRequest.java | 4 ++++ .../java/org/apache/apisix/plugin/runner/PostRequest.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/HttpRequest.java b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/HttpRequest.java index 96f9c475..2efede05 100644 --- a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/HttpRequest.java +++ b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/HttpRequest.java @@ -308,6 +308,10 @@ public String getBody(Charset charset) { return new String(body, charset); } + public void setBody(String body) { + this.body = body.getBytes(); + } + public void setBody(byte[] body) { this.body = body; } diff --git a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostRequest.java b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostRequest.java index 61179b19..88315f59 100644 --- a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostRequest.java +++ b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostRequest.java @@ -94,6 +94,10 @@ public Integer getUpstreamStatusCode() { return status; } + public void setBody(String body) { + this.body = body.getBytes(); + } + public void setBody(byte[] body) { this.body = body; } From af1db5a8c9d97d7270bfc6618f6b8ce59dbd7f08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A1=E1=86=BC=E1=84=8C=E1=85=AE=E1=86=AB?= =?UTF-8?q?=E1=84=8B=E1=85=A7=E1=86=BC=28Junyeong=20Jang=29/Core=E1=84=91?= =?UTF-8?q?=E1=85=B3=E1=86=AF=E1=84=85=E1=85=A2=E1=86=BA=E1=84=91=E1=85=A9?= =?UTF-8?q?=E1=86=B7=E1=84=80=E1=85=A2=E1=84=87=E1=85=A1=E1=86=AF=E1=84=90?= =?UTF-8?q?=E1=85=B5=E1=86=B7/11ST?= Date: Mon, 22 May 2023 19:23:55 +0900 Subject: [PATCH 5/6] refactor: remove unused import --- .../apisix/plugin/runner/filter/PostReqWithVarsFilter.java | 1 - 1 file changed, 1 deletion(-) diff --git a/sample/src/main/java/org/apache/apisix/plugin/runner/filter/PostReqWithVarsFilter.java b/sample/src/main/java/org/apache/apisix/plugin/runner/filter/PostReqWithVarsFilter.java index 45307d57..54ecf854 100644 --- a/sample/src/main/java/org/apache/apisix/plugin/runner/filter/PostReqWithVarsFilter.java +++ b/sample/src/main/java/org/apache/apisix/plugin/runner/filter/PostReqWithVarsFilter.java @@ -24,7 +24,6 @@ import org.apache.apisix.plugin.runner.PostResponse; import org.springframework.stereotype.Component; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; From 25237fbe553d237674cf3d7e91482e31ec4a2072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A1=E1=86=BC=E1=84=8C=E1=85=AE=E1=86=AB?= =?UTF-8?q?=E1=84=8B=E1=85=A7=E1=86=BC=28Junyeong=20Jang=29/Core=E1=84=91?= =?UTF-8?q?=E1=85=B3=E1=86=AF=E1=84=85=E1=85=A2=E1=86=BA=E1=84=91=E1=85=A9?= =?UTF-8?q?=E1=86=B7=E1=84=80=E1=85=A2=E1=84=87=E1=85=A1=E1=86=AF=E1=84=90?= =?UTF-8?q?=E1=85=B5=E1=86=B7/11ST?= Date: Tue, 30 May 2023 19:02:56 +0900 Subject: [PATCH 6/6] docs: add license header --- .../apisix/plugin/runner/PostResponseTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/runner-plugin-sdk/src/test/java/org/apache/apisix/plugin/runner/PostResponseTest.java b/runner-plugin-sdk/src/test/java/org/apache/apisix/plugin/runner/PostResponseTest.java index 512aca96..1c8a4de8 100644 --- a/runner-plugin-sdk/src/test/java/org/apache/apisix/plugin/runner/PostResponseTest.java +++ b/runner-plugin-sdk/src/test/java/org/apache/apisix/plugin/runner/PostResponseTest.java @@ -1,3 +1,20 @@ +/* + * 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.apisix.plugin.runner; import org.junit.jupiter.api.DisplayName;