Skip to main content
Version: 0.1

Development

Overview#

This document explains how to get started to develop the apisix-java-plugin-runner.

Prerequisites#

Install#

cd /path/to/apisix-java-plugin-runner./mvnw install

Write Filter#

Refer to the code in the sample to learn how to extend PluginFilter, define the order, rewrite requests and stop requests.

Code Location#

You need to put the code in runner-plugin so that the apisix-java-plugin-runner.jar will contain the filter implementation class you wrote when you package it.

The order of filter execution#

The order of execution of the filter in the runner is determined by the index of the conf array in the ext-plugin-pre-req or ext-plugin-post-req configuration.

The name of filter execution#

The requests go through filters that are dynamically configured on APISIX. For example, if the following configuration is done on APISIX

curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{    "uri":"/hello",    "plugins":{        "ext-plugin-pre-req":{            "conf":[                {                    "name":"FooFilter",                    "value":"bar"                }            ]        }    },    "upstream":{        "nodes":{            "127.0.0.1:1980":1        },        "type":"roundrobin"    }}'

apisix-java-plugin-runner will look for implementation classes named FooFilter, and the name of each filter's implementation class is the return value of its overridden function public String name().

Rewrite Request#

If you perform the following function call in the filter chain of the implementation class

  • request.setPath()
  • request.setHeader()
  • request.setArg()

this means to rewrit the current request, the upstream server will receive the relevant parameters rewritten here.

Stop Request#

If you perform the following function call in the filter chain of the implementation class

  • response.setStatusCode()
  • response.setHeader()
  • response.setBody()

this means to stop the current request, the client will receive the relevant parameters generated here.

Test#

Run Unit Test Suites#

cd /path/to/apisix-java-plugin-runner ./mvnw test

Mimic practical environment#

If you want to mimic the practical environment, you need to configure the route on APISIX by having the request go through the filter you want to test, for example

"plugins":{    "ext-plugin-pre-req":{        "conf":[            {                "name":"FooFilter",                "value":"bar"            }        ]    }}

and then make a request to APISIX to trigger the route.