package com.netflix.ribbon.proxy.processor; import com.netflix.ribbon.RibbonResourceFactory; import com.netflix.ribbon.http.HttpRequestTemplate.Builder; import com.netflix.ribbon.http.HttpResourceGroup; import com.netflix.ribbon.proxy.ProxyAnnotationException; import com.netflix.ribbon.proxy.annotation.Http; import com.netflix.ribbon.proxy.annotation.Http.Header; import com.netflix.ribbon.proxy.annotation.Http.HttpMethod; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import static java.lang.String.format; /** * Http annotation */ public class HttpAnnotationProcessor implements AnnotationProcessor<HttpResourceGroup.Builder, Builder> { @Override public void process(String templateName, Builder templateBuilder, Method method) { Http annotation = method.getAnnotation(Http.class); if (null == annotation) { throw new ProxyAnnotationException(format("Method %s misses @Http annotation", method.getName())); } final HttpMethod httpMethod = annotation.method(); final String uriTemplate = annotation.uri(); final Map<String, List<String>> headers = annotation.headers().length == 0 ? null : new HashMap<String, List<String>>(); for (Header h : annotation.headers()) { if (!headers.containsKey(h.name())) { ArrayList<String> values = new ArrayList<String>(); values.add(h.value()); headers.put(h.name(), values); } else { headers.get(h.name()).add(h.value()); } } templateBuilder.withMethod(httpMethod.name()); // uri if (uriTemplate != null) { templateBuilder.withUriTemplate(uriTemplate); } // headers if (headers != null) { for (Entry<String, List<String>> header : headers.entrySet()) { String key = header.getKey(); for (String value : header.getValue()) { templateBuilder.withHeader(key, value); } } } } @Override public void process(String groupName, HttpResourceGroup.Builder groupBuilder, RibbonResourceFactory resourceFactory, Class<?> interfaceClass) { } }