private void getPolicy(Api api, int policyIdx, String probeConfigRaw, AsyncResponse response) {
        if (policyIdx < api.getApiPolicies().size()) {
            // Get API policy by index
            Policy policyConfig = api.getApiPolicies().get(policyIdx);
            IPolicyFactory policyFactory = getEngine().getPolicyFactory();
            // Load the policy (may not have been loaded yet, but is usually cached).
            policyFactory.loadPolicy(policyConfig.getPolicyImpl(), policyLoad -> {
                // Generate & load appropriate config for policy (is cached, so OK to do repeatedly).
                IPolicy policy = policyLoad.getResult();
                PolicyContextImpl policyContext = new PolicyContextImpl(getEngine().getComponentRegistry());
                ProbeContext probeContext = buildProbeContext(api, null, null, api.getEndpointType());
                // Probe it!
                if (policy instanceof IPolicyProbe) {
                    IPolicyProbe<?, ?> policyWithProbe = (IPolicyProbe<?, ?>) policy;
                    policyWithProbe.probe(probeConfigRaw, policyConfig.getPolicyJsonConfig(), probeContext, policyContext, probeResult -> {
                        IPolicyProbeResponse probeResponse = probeResult.getResult();
                        LOGGER.debug("Probe response for config {0} -> {1}", probeConfigRaw, probeResponse);
                        response.resume(Response.ok(probeResponse).build());
                    });
                } else {
                    response.resume(Response.status(Status.NOT_IMPLEMENTED.getStatusCode(), "Requested policy does not implement a policy probe").build());
                }
            });
        } else {
            response.resume(new IllegalArgumentException("Provided policy index out of bounds: " + policyIdx));
        }
    }
@see IApiResource#getApiEndpoint(java.lang.String, java.lang.String, java.lang.String)
gateway/api/rest-impl/src/main/java/io/apiman/gateway/api/rest/impl/ApiResourceImpl.java