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;
}