package org.jboss.resteasy.client.jaxrs.internal.proxy.extractors;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.HashMap;
/**
* This class represents the proxying functionality for creating a
* "rich response object" that has the @ResponseObject annotation. The method
* implementations ware created in ResponseObjectEntityExtractorFactory
*
* @author <a href="mailto:sduskis@gmail.com">Solomon Duskis</a>
* @version $Revision: 1 $
* @see EntityExtractor , ResponseObjectEntityExtractorFactory
*/
@SuppressWarnings("unchecked")
public class ResponseObjectProxy<T> implements EntityExtractor
{
private Class<T> returnType;
private HashMap<Method, EntityExtractor<?>> methodHandlers;
public ResponseObjectProxy(Method method, EntityExtractorFactory extractorFactory)
{
this.returnType = (Class<T>) method.getReturnType();
this.methodHandlers = new HashMap<Method, EntityExtractor<?>>();
for (Method interfaceMethod : this.returnType.getMethods())
{
this.methodHandlers.put(interfaceMethod, extractorFactory.createExtractor(interfaceMethod));
}
}
public Object extractEntity(ClientContext context, Object... args)
{
Class<?>[] intfs = {returnType};
ClientResponseProxy clientProxy = new ClientResponseProxy(context, methodHandlers, returnType);
return Proxy.newProxyInstance(returnType.getClassLoader(), intfs, clientProxy);
}
}