class GatewayStrategyContextHolder extends AbstractStrategyContextHolder {
    public ServerWebExchange getExchange() {
        return GatewayStrategyContext.getCurrentContext().getExchange();
    }

    public ServerHttpRequest getServerHttpRequest() {<FILL_FUNCTION_BODY>}

    @Override
    public Enumeration<String> getHeaderNames() {
        ServerHttpRequest request = getServerHttpRequest();
        if (request == null) {
            return null;
        }

        Set<String> headerNameSet = request.getHeaders().keySet();

        return Collections.enumeration(headerNameSet);
    }

    @Override
    public String getHeader(String name) {
        ServerHttpRequest request = getServerHttpRequest();
        if (request == null) {
            return null;
        }

        return request.getHeaders().getFirst(name);
    }

    @Override
    public String getParameter(String name) {
        ServerHttpRequest request = getServerHttpRequest();
        if (request == null) {
            return null;
        }

        return request.getQueryParams().getFirst(name);
    }

    public HttpCookie getHttpCookie(String name) {
        ServerHttpRequest request = getServerHttpRequest();
        if (request == null) {
            return null;
        }

        return request.getCookies().getFirst(name);
    }

    @Override
    public String getCookie(String name) {
        HttpCookie cookie = getHttpCookie(name);
        if (cookie != null) {
            return cookie.getValue();
        }

        return null;
    }

    public URI getURI() {
        ServerHttpRequest request = getServerHttpRequest();
        if (request == null) {
            return null;
        }

        return request.getURI();
    }
}

        ServerWebExchange exchange = getExchange();
        if (exchange == null) {
            // LOG.warn("The ServerWebExchange object is lost for thread switched, or it is got before context filter probably");

            return null;
        }

        ServerHttpRequest request = exchange.getRequest();
        if (request == null) {
            // LOG.warn("The ServerHttpRequest object is lost for thread switched, or it is got before context filter probably");

            return null;
        }

        return request;
    
<methods>public non-sealed void <init>() ,public java.lang.String getContext(java.lang.String) ,public java.lang.String getContextRouteAddress() ,public java.lang.String getContextRouteAddressBlacklist() ,public java.lang.String getContextRouteAddressFailover() ,public java.lang.String getContextRouteEnvironment() ,public java.lang.String getContextRouteEnvironmentFailover() ,public java.lang.String getContextRouteIdBlacklist() ,public java.lang.String getContextRouteRegion() ,public java.lang.String getContextRouteRegionFailover() ,public java.lang.String getContextRouteRegionTransfer() ,public java.lang.String getContextRouteRegionWeight() ,public java.lang.String getContextRouteVersion() ,public java.lang.String getContextRouteVersionFailover() ,public java.lang.String getContextRouteVersionPrefer() ,public java.lang.String getContextRouteVersionWeight() ,public java.lang.String getContextRouteZoneFailover() ,public com.nepxion.discovery.plugin.framework.adapter.PluginAdapter getPluginAdapter() ,public java.lang.String getRouteAddress() ,public java.lang.String getRouteAddressBlacklist() ,public java.lang.String getRouteAddressFailover() ,public java.lang.String getRouteEnvironment() ,public java.lang.String getRouteEnvironmentFailover() ,public java.lang.String getRouteIdBlacklist() ,public java.lang.String getRouteRegion() ,public java.lang.String getRouteRegionFailover() ,public java.lang.String getRouteRegionTransfer() ,public java.lang.String getRouteRegionWeight() ,public java.lang.String getRouteVersion() ,public java.lang.String getRouteVersionFailover() ,public java.lang.String getRouteVersionPrefer() ,public java.lang.String getRouteVersionWeight() ,public java.lang.String getRouteZoneFailover() ,public java.lang.String getSpanId() ,public com.nepxion.discovery.plugin.strategy.wrapper.StrategyWrapper getStrategyWrapper() ,public java.lang.String getTraceId() <variables>protected com.nepxion.discovery.plugin.framework.adapter.PluginAdapter pluginAdapter,protected com.nepxion.discovery.plugin.strategy.monitor.StrategyMonitorContext strategyMonitorContext,protected com.nepxion.discovery.plugin.strategy.wrapper.StrategyWrapper strategyWrapper