in runner-plugin-sdk/src/main/java/org/apache/apisix/plugin/runner/HttpResponse.java [171:213]
private int buildStopResp(FlatBufferBuilder builder) {
int headerIndex = -1;
if (!CollectionUtils.isEmpty(respHeaders)) {
int[] headerTexts = new int[respHeaders.size()];
int i = -1;
for (Map.Entry<String, String> header : respHeaders.entrySet()) {
int key = builder.createString(header.getKey());
int value = 0;
if (!Objects.isNull(header.getValue())) {
value = builder.createString(header.getValue());
}
int text = TextEntry.createTextEntry(builder, key, value);
headerTexts[++i] = text;
}
headerIndex = Stop.createHeadersVector(builder, headerTexts);
}
int bodyIndex = -1;
if (StringUtils.hasText(body)) {
byte[] bodyBytes = body.getBytes(StandardCharsets.UTF_8);
bodyIndex = Stop.createBodyVector(builder, bodyBytes);
}
Stop.startStop(builder);
if (!Objects.isNull(statusCode)) {
Stop.addStatus(builder, statusCode);
} else {
/**
* Avoid APISIX using 0 as the default HTTP Status Code
* {@link org.apache.apisix.plugin.runner.HttpResponse#setStatusCode(int statusCode)}
* @see https://github.com/apache/apisix-java-plugin-runner/issues/55
*/
Stop.addStatus(builder, 200);
logger.info("Use 200 as the default HTTP Status Code when setStatusCode is not called");
}
if (-1 != headerIndex) {
Stop.addHeaders(builder, headerIndex);
}
if (-1 != bodyIndex) {
Stop.addBody(builder, bodyIndex);
}
return Stop.endStop(builder);
}