private List parseHeadMatch()

in dubbo-xds/src/main/java/org/apache/dubbo/rpc/cluster/router/xds/RdsVirtualHostListener.java [114:155]


    private List<HeaderMatcher> parseHeadMatch(RouteMatch routeMatch) {
        List<HeaderMatcher> headerMatchers = new ArrayList<>();
        List<io.envoyproxy.envoy.config.route.v3.HeaderMatcher> headersList = routeMatch.getHeadersList();
        for (io.envoyproxy.envoy.config.route.v3.HeaderMatcher headerMatcher : headersList) {
            HeaderMatcher matcher = new HeaderMatcher();
            matcher.setName(headerMatcher.getName());
            matcher.setInverted(headerMatcher.getInvertMatch());
            switch (headerMatcher.getHeaderMatchSpecifierCase()) {
                case EXACT_MATCH:
                    matcher.setExactValue(headerMatcher.getExactMatch());
                    headerMatchers.add(matcher);
                    break;
                case SAFE_REGEX_MATCH:
                    matcher.setRegex(headerMatcher.getSafeRegexMatch().getRegex());
                    headerMatchers.add(matcher);
                    break;
                case RANGE_MATCH:
                    LongRangeMatch rang = new LongRangeMatch();
                    rang.setStart(headerMatcher.getRangeMatch().getStart());
                    rang.setEnd(headerMatcher.getRangeMatch().getEnd());
                    matcher.setRange(rang);
                    headerMatchers.add(matcher);
                    break;
                case PRESENT_MATCH:
                    matcher.setPresent(headerMatcher.getPresentMatch());
                    headerMatchers.add(matcher);
                    break;
                case PREFIX_MATCH:
                    matcher.setPrefix(headerMatcher.getPrefixMatch());
                    headerMatchers.add(matcher);
                    break;
                case SUFFIX_MATCH:
                    matcher.setSuffix(headerMatcher.getSuffixMatch());
                    headerMatchers.add(matcher);
                    break;
                case HEADERMATCHSPECIFIER_NOT_SET:
                default:
                    throw new IllegalArgumentException("Header specifier is not expect");
            }
        }
        return headerMatchers;
    }