package org.restler.client;
import net.sf.cglib.proxy.InvocationHandler;
public abstract class DefaultCoreModule implements CoreModule {
private final ClientFactory factory;
public DefaultCoreModule(ClientFactory factory) {
this.factory = factory;
}
@Override
public <C> C produceClient(Class<C> controllerClass) throws IllegalArgumentException {
ClassServiceDescriptor descriptor = new ClassServiceDescriptor(controllerClass);
if (!canHandle(descriptor)) {
throw new RestlerException("Could not handle " + controllerClass + " with " + this);
}
InvocationHandler handler = createHandler(descriptor);
return factory.produceClient(controllerClass, handler);
}
protected abstract InvocationHandler createHandler(ServiceDescriptor descriptor);
}