package org.restler.spring.mvc; import net.sf.cglib.proxy.InvocationHandler; import org.restler.client.*; import org.restler.http.HttpCallExecutor; import org.restler.http.RequestExecutor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RestController; import java.net.URI; import java.util.List; public class SpringMvc extends DefaultCoreModule { private final CallExecutionChain chain; private final URI baseUri; private final ParameterResolver parameterResolver; public SpringMvc(ClientFactory factory, RequestExecutor requestExecutor, List<CallEnhancer> enhancers, URI baseUri, ParameterResolver parameterResolver) { super(factory); HttpCallExecutor callExecutor = new HttpCallExecutor(requestExecutor); chain = new CallExecutionChain(callExecutor, enhancers); this.baseUri = baseUri; this.parameterResolver = parameterResolver; } @Override public boolean canHandle(ServiceDescriptor descriptor) { if (!(descriptor instanceof ClassServiceDescriptor)) { return false; } Class<?> controllerClass = ((ClassServiceDescriptor) descriptor).getServiceDescriptor(); return AnnotationUtils.isAnnotated(controllerClass, Controller.class) || AnnotationUtils.isAnnotated(controllerClass, RestController.class); } @Override protected InvocationHandler createHandler(ServiceDescriptor descriptor) { return new CallExecutorInvocationHandler(chain, new SpringMvcMethodInvocationMapper(baseUri, parameterResolver)); } }