diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index c2132b15..0b1394ba 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -26,7 +26,7 @@ on:
jobs:
CI:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-latest
timeout-minutes: 180
strategy:
fail-fast: true
diff --git a/.gitignore b/.gitignore
index 7eb9c233..7fe89e3c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,6 +23,7 @@ target/
!**/src/main/**/target/
!**/src/test/**/target/
release/
+logs/
### IntelliJ IDEA ###
.idea
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 941ba3b5..5b29e0c3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -23,9 +23,34 @@ title: Changelog
## Table of Contents
-- [0.3.0](#030)
-- [0.2.0](#020)
-- [0.1.0](#010)
+- [0.5.0](#032)
+- [0.4.0](#046)
+- [0.3.0](#055)
+- [0.2.0](#068)
+- [0.1.0](#096)
+
+## 0.5.0
+
+This release mainly improves log4j configuration and CI, provides other encoding support and bug fixes.
+
+### Core
+
+- add log4j2 configuration. [214](https://github.com/apache/apisix-java-plugin-runner/pull/214)
+- `PostResponse` supports charset other than `UTF-8`. [239](https://github.com/apache/apisix-java-plugin-runner/pull/239)
+- update CI runs on ubuntu-latest. [242](https://github.com/apache/apisix-java-plugin-runner/pull/242)
+
+### Bugfix
+
+- fix `ExtraInfoResponse` class `getResult` method bug. [244](https://github.com/apache/apisix-java-plugin-runner/pull/244)
+
+## 0.4.0
+
+This release mainly provides the ability to get body data from upstream.
+
+### Core
+
+- support for getting upstream response body. [200](https://github.com/apache/apisix-java-plugin-runner/pull/200)
+- support watching config changes. [205](https://github.com/apache/apisix-java-plugin-runner/pull/208)
## 0.3.0
diff --git a/Makefile b/Makefile
index a932f321..8542faa2 100644
--- a/Makefile
+++ b/Makefile
@@ -17,7 +17,7 @@
SHELL := /bin/bash -o pipefail
-VERSION ?= 0.3.0
+VERSION ?= 0.5.0
RELEASE_SRC = apisix-java-plugin-runner-${VERSION}-src
.PHONY: release-src
diff --git a/README.md b/README.md
index b680d2a9..9e687fb3 100644
--- a/README.md
+++ b/README.md
@@ -30,6 +30,8 @@ Version Matrix
| 0.1.0 | >= [2.7.0](https://github.com/apache/apisix/blob/master/CHANGELOG.md#270) |
| 0.2.0 | >= [2.12.0](https://github.com/apache/apisix/blob/master/CHANGELOG.md#2102) |
| 0.3.0 | >= [2.15.0](https://github.com/apache/apisix/blob/master/CHANGELOG.md#2150) |
+| 0.4.0 | >= [3.0.0](https://github.com/apache/apisix/blob/master/CHANGELOG.md#300) |
+| 0.5.0 | >= [3.0.0](https://github.com/apache/apisix/blob/master/CHANGELOG.md#300) |
How it Works
-------------
diff --git a/docs/en/latest/installation-guide.md b/docs/en/latest/installation-guide.md
index 5a4b58ce..1d656056 100644
--- a/docs/en/latest/installation-guide.md
+++ b/docs/en/latest/installation-guide.md
@@ -48,7 +48,7 @@ Install
org.apache.apisix
apisix-runner-starter
- 0.3.1-SNAPSHOT
+ 0.5.0
```
diff --git a/docs/zh/quick-start.md b/docs/zh/quick-start.md
index c0c81078..886e9ded 100644
--- a/docs/zh/quick-start.md
+++ b/docs/zh/quick-start.md
@@ -22,13 +22,10 @@ public class CheckTokenFilter implements PluginFilter {
}
@Override
- public Mono filter(HttpRequest request, HttpResponse response, PluginFilterChain chain) {
+ public void filter(HttpRequest request, HttpResponse response, PluginFilterChain chain) {
/*
* todo your business here
*/
-
-
- return chain.filter(request, response);
}
}
```
@@ -48,18 +45,17 @@ apisix-java-plugin-runner 与 APISIX 用 `Unix Domain Socket` 进行进程间通
构建完成,你会在 `dist` 目录看见构建产物
```
-apache-apisix-java-plugin-runner-0.1.0-bin.tar.gz
+apache-apisix-java-plugin-runner-${your_plugin_version}-bin.tar.gz
```
在`dist`目录添加`Dockerfile`文件
```dockerfile
-FROM apache/apisix:${version}-alpine
-
-RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories && apk add --no-cache openjdk8-jre
+FROM apache/apisix:${version}-debian
-ADD apache-apisix-java-plugin-runner-0.1.0-bin.tar.gz /usr/local/
+RUN apt -y install openjdk-11-jdk
+ADD apache-apisix-java-plugin-runner-${your_plugin_version}-SNAPSHOT-bin.tar.gz /usr/local/
```
然后构建容器镜像
@@ -73,11 +69,20 @@ ADD apache-apisix-java-plugin-runner-0.1.0-bin.tar.gz /usr/local/
```yaml
ext-plugin:
- cmd: ['java', '-jar', '-Xmx4g', '-Xms4g', '/path/to/apisix-runner-bin/apisix-java-plugin-runner.jar']
+ cmd: ['java', '-jar', '-Xmx4g', '-Xms4g', '/usr/local/apisix-runner-bin/apisix-java-plugin-runner.jar']
```
构建完成的 `apache/apisix:${version}-alpine-with-java-plugin` 镜像内即包含 APISIX 与 apisix-java-plugun-runner。
+### 调试
+如果需要调试插件, 可以将上述 ext-plugin 配置中添加调试参数:
+```yaml
+ext-plugin:
+ cmd: ['java', '-jar', '-Xmx4g', '-Xms4g','-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005', '/usr/local/apisix-runner-bin/apisix-java-plugin-runner.jar']
+```
+
+就可以通过 Docker 的 5005 端口远程调试插件。
+
### 使用插件
配置路由
diff --git a/pom.xml b/pom.xml
index 0d0ca540..e3e7a474 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,7 +22,7 @@
org.apache.apisix
apisix-plugin-runner
- 0.3.1-SNAPSHOT
+ 0.5.0
org.apache
@@ -88,6 +88,11 @@
pom
import
+
+ com.lmax
+ disruptor
+ 3.4.4
+
org.springframework.boot
spring-boot-dependencies
diff --git a/runner-core/pom.xml b/runner-core/pom.xml
index f61a7397..81e0dc0c 100644
--- a/runner-core/pom.xml
+++ b/runner-core/pom.xml
@@ -24,7 +24,7 @@
org.apache.apisix
apisix-plugin-runner
- 0.3.1-SNAPSHOT
+ 0.5.0
apisix-runner-core
@@ -36,7 +36,7 @@
org.apache.apisix
apisix-runner-plugin-sdk
- 0.3.1-SNAPSHOT
+ 0.5.0
org.springframework.boot
@@ -63,6 +63,10 @@
+
+ com.lmax
+ disruptor
+
io.netty
netty-all
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..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
@@ -215,7 +215,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 +233,7 @@ private void handleExtraInfo(ChannelHandlerContext ctx, ExtraInfoResponse reques
}
}
else {
- nginxVars.put(varsKey, result);
+ nginxVars.put(varsKey, new String(result));
}
if (queue.isEmpty()) {
diff --git a/runner-dist/apisix-runner-bin-dist/pom.xml b/runner-dist/apisix-runner-bin-dist/pom.xml
index 69505d21..6cc2e349 100644
--- a/runner-dist/apisix-runner-bin-dist/pom.xml
+++ b/runner-dist/apisix-runner-bin-dist/pom.xml
@@ -23,7 +23,7 @@
org.apache.apisix
apisix-runner-dist
- 0.3.1-SNAPSHOT
+ 0.5.0
apisix-runner-bin-dist
diff --git a/runner-dist/apisix-runner-src-dist/pom.xml b/runner-dist/apisix-runner-src-dist/pom.xml
index a8b3ee6b..cf53548c 100644
--- a/runner-dist/apisix-runner-src-dist/pom.xml
+++ b/runner-dist/apisix-runner-src-dist/pom.xml
@@ -23,7 +23,7 @@
org.apache.apisix
apisix-runner-dist
- 0.3.1-SNAPSHOT
+ 0.5.0
apisix-runner-src-dist
diff --git a/runner-dist/pom.xml b/runner-dist/pom.xml
index 558b3b55..40acab4d 100644
--- a/runner-dist/pom.xml
+++ b/runner-dist/pom.xml
@@ -23,7 +23,7 @@
org.apache.apisix
apisix-plugin-runner
- 0.3.1-SNAPSHOT
+ 0.5.0
apisix-runner-dist
@@ -35,7 +35,7 @@
org.apache.apisix
apisix-runner-starter
- 0.3.1-SNAPSHOT
+ 0.5.0
diff --git a/runner-plugin-sdk/pom.xml b/runner-plugin-sdk/pom.xml
index 065e5a72..2ba9f77c 100644
--- a/runner-plugin-sdk/pom.xml
+++ b/runner-plugin-sdk/pom.xml
@@ -24,7 +24,7 @@
org.apache.apisix
apisix-plugin-runner
- 0.3.1-SNAPSHOT
+ 0.5.0
apisix-runner-plugin-sdk
@@ -60,5 +60,10 @@
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
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..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
@@ -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;
@@ -300,10 +301,18 @@ public void setVars(Map vars) {
}
public String getBody() {
- return body;
+ return new String(body);
+ }
+
+ 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 ba4179ad..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
@@ -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;
@@ -94,11 +95,19 @@ public Integer getUpstreamStatusCode() {
}
public void setBody(String body) {
+ this.body = body.getBytes();
+ }
+
+ public void setBody(byte[] body) {
this.body = body;
}
public String getBody() {
- return body;
+ return new String(body);
+ }
+
+ public String getBody(Charset charset) {
+ return new String(body, charset);
}
public String getVars(String key) {
diff --git a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostResponse.java b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostResponse.java
index ab9d3306..127de5a0 100644
--- a/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostResponse.java
+++ b/runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/PostResponse.java
@@ -26,6 +26,7 @@
import org.springframework.util.StringUtils;
import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
@@ -43,8 +44,11 @@ public class PostResponse implements A6Response {
private Map headers;
+ private Charset charset;
+
public PostResponse(long requestId) {
this.requestId = requestId;
+ this.charset = StandardCharsets.UTF_8;
}
@Override
@@ -53,7 +57,7 @@ public ByteBuffer encode() {
int bodyIndex = -1;
if (StringUtils.hasText(body)) {
- byte[] bodyBytes = body.getBytes(StandardCharsets.UTF_8);
+ byte[] bodyBytes = body.getBytes(this.charset);
bodyIndex = Resp.createBodyVector(builder, bodyBytes);
}
@@ -122,4 +126,8 @@ public void setBody(String body) {
public void setStatusCode(int statusCode) {
this.statusCode = statusCode;
}
+
+ public void setCharset(Charset charset) {
+ this.charset = charset;
+ }
}
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
new file mode 100644
index 00000000..1c8a4de8
--- /dev/null
+++ b/runner-plugin-sdk/src/test/java/org/apache/apisix/plugin/runner/PostResponseTest.java
@@ -0,0 +1,72 @@
+/*
+ * 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;
+import org.junit.jupiter.api.Test;
+
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class PostResponseTest {
+
+ @Test
+ @DisplayName("test encode with set charset")
+ void testEncodeWithSetCharset() {
+ long requestId = 1L;
+ String body = "dummy body";
+ Charset charset = StandardCharsets.UTF_16;
+
+ PostResponse postResponse = new PostResponse(requestId);
+ postResponse.setBody(body);
+ postResponse.setCharset(charset);
+
+ ByteBuffer encoded = postResponse.encode();
+
+ assertTrue(Collections.indexOfSubList(byteArrayToList(encoded.array()), byteArrayToList(body.getBytes(charset))) >= 0);
+ }
+
+ @Test
+ @DisplayName("test encode without set charset")
+ void testEncodeWithoutSetCharset() {
+ long requestId = 1L;
+ String body = "dummy body";
+ Charset charset = StandardCharsets.UTF_8;
+
+ PostResponse postResponse = new PostResponse(requestId);
+ postResponse.setBody(body);
+
+ ByteBuffer encoded = postResponse.encode();
+
+ assertTrue(Collections.indexOfSubList(byteArrayToList(encoded.array()), byteArrayToList(body.getBytes(charset))) >= 0);
+ }
+
+ private List byteArrayToList(byte[] array) {
+ List list = new ArrayList<>();
+ for (byte b : array) {
+ list.add(b);
+ }
+ return list;
+ }
+}
diff --git a/runner-plugin/pom.xml b/runner-plugin/pom.xml
index 5e1b2f07..cabee963 100644
--- a/runner-plugin/pom.xml
+++ b/runner-plugin/pom.xml
@@ -23,7 +23,7 @@
org.apache.apisix
apisix-plugin-runner
- 0.3.1-SNAPSHOT
+ 0.5.0
apisix-runner-plugin
@@ -35,7 +35,7 @@
org.apache.apisix
apisix-runner-plugin-sdk
- 0.3.1-SNAPSHOT
+ 0.5.0
com.google.code.gson
diff --git a/runner-starter/pom.xml b/runner-starter/pom.xml
index 0526bf36..d6bda089 100644
--- a/runner-starter/pom.xml
+++ b/runner-starter/pom.xml
@@ -23,7 +23,7 @@
org.apache.apisix
apisix-plugin-runner
- 0.3.1-SNAPSHOT
+ 0.5.0
apisix-runner-starter
@@ -35,7 +35,7 @@
org.apache.apisix
apisix-runner-core
- 0.3.1-SNAPSHOT
+ 0.5.0
diff --git a/runner-starter/src/main/resources/log4j2.xml b/runner-starter/src/main/resources/log4j2.xml
new file mode 100644
index 00000000..fe2c8880
--- /dev/null
+++ b/runner-starter/src/main/resources/log4j2.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+ debug
+ ${sys:user.dir}
+ ${sys:file.encoding}
+
+
+
+
+
+
+
+ %d %-5p %-32t - %m%n %throwable
+
+
+
+
+
+
+
+
+
+ %d %-5p %-32t - %m%n %throwable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sample/pom.xml b/sample/pom.xml
index 013de5e3..7489b74a 100644
--- a/sample/pom.xml
+++ b/sample/pom.xml
@@ -23,7 +23,7 @@
org.apache.apisix
apisix-plugin-runner
- 0.3.1-SNAPSHOT
+ 0.5.0
apisix-runner-sample
@@ -35,7 +35,7 @@
org.apache.apisix
apisix-runner-plugin-sdk
- 0.3.1-SNAPSHOT
+ 0.5.0
com.google.code.gson