Ao realizar o extends da classe abaixo e usar o método “merge” uma exceção é lançada pelo Paranamer. Por qual motivo?
@AllArgsConstructor
public class GenericController <B extends Business<T>, T> {
@Getter
private B business;
@Getter
private Result result;
@Get
public void index() {
//Homepage.
}
@Post
public void create(@Valid T entity) {
Pair<Boolean, String> validation = customValidation(entity);
if(validation.getKey()){
business.persist(entity);
}
result.use(ExtJSJson.class).from(validation.getValue()).success(validation.getKey()).serialize();
}
@Get
public void retrieve(int limit, int page) {
result.use(ExtJS4Json.class).from(business.load(limit, page))
.total(business.getTotal())
.serialize();
}
@Post
public void update(@Valid T entity) {
Pair<Boolean, String> validation = customValidation(entity);
if(validation.getKey()){
business.update(entity);
}
result.use(ExtJSJson.class).from(validation.getValue()).success(validation.getKey()).serialize();
}
@Post
public void delete(Long... ids) {
business.delete(ids);
result.use(ExtJSJson.class).from("").success().serialize();
}
@Post
public void merge(@Valid T entity) {
Pair<Boolean, String> validation = customValidation(entity);
if(validation.getKey()){
business.merge(entity);
}
result.use(ExtJSJson.class).from(validation.getValue()).success(validation.getKey()).serialize();
}
//Override for custom validations.
protected Pair<Boolean, String> customValidation(T entity) {
return Pair.of(true, "");
}
}
LOG
15:02:36,098 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for GenericController.merge(Object) as [entity]
15:02:36,098 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for GenericController.merge(Object) as [entity]
Exceção
15:07:54,791 DEBUG [DefaultResourceTranslator] trying to access /empresa/merge
15:07:54,959 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: GenericController.mergeGenericController.merge(Object)]
15:07:54,959 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor
15:07:54,959 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor
15:07:54,975 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor
15:07:54,975 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor HibernateTransactionInterceptor
15:07:54,990 DEBUG [LazyInterceptorHandler] Invoking interceptor ParametersInstantiatorInterceptor
15:07:54,990 DEBUG [JstlLocalization ] couldn’t find message bundle, creating an empty one
15:07:54,990 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for GenericController.merge(Object) as [entity]
20/10/2011 15:07:54 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.http.InvalidParameterException: unable to instantiate type T
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createRoot(OgnlParametersProvider.java:154)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createParameter(OgnlParametersProvider.java:122)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.getParametersFor(OgnlParametersProvider.java:85)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.getParametersFor(ParametersInstantiatorInterceptor.java:105)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:48)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl cannot be cast to java.lang.Class
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider$Parameter.actualType(OgnlParametersProvider.java:107)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createRoot(OgnlParametersProvider.java:152)
… 39 more