class SkyWalkingGatewayStrategyFilter implements GatewayStrategyFilter {
    public static final String SKYWALING_SPAN = "SKYWALING_SPAN";
    public static final String OWNER = "owner";

    @Override
    public int getOrder() {
        return Ordered.HIGHEST_PRECEDENCE;
    }

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {<FILL_FUNCTION_BODY>}

    private String getTraceId(AbstractTracingSpan tracingSpan) throws Exception {
        if (tracingSpan == null) {
            return null;
        }

        Object owner = ReflectionUtil.getValue(AbstractTracingSpan.class, tracingSpan, OWNER);
        if (owner instanceof TracingContext) {
            TracingContext tracingContext = (TracingContext) owner;

            return tracingContext.getReadablePrimaryTraceId();
        }

        return null;
    }
}

        String traceId = null;

        try {
            EntrySpan entrySpan = exchange.getAttribute(SKYWALING_SPAN);

            traceId = getTraceId(entrySpan);
        } catch (Exception e) {

        }

        StrategySpan strategySpan = new StrategySpan();
        strategySpan.setTraceId(traceId != null ? traceId : DiscoveryConstant.IGNORED);
        strategySpan.setSpanId(DiscoveryConstant.IGNORED);

        StrategyTracerContext.getCurrentContext().setSpan(strategySpan);

        return chain.filter(exchange);
    
<no_super_class>