Olá!
Estou tentando fazer uma migração da aplicação da Apostila da Caelum FJ28 do hibernate para o Objectify só que infelizmente esta dando um erro.
Segue abaixo os códigos que eu estou utilizando:
import javax.persistence.Id;
import br.com.caelum.vraptor.ioc.Component;
public class Produto {
@Id
private long id;
private String nome;
private String descricao;
private Double preco;
public Produto(long id, String nome, String descricao, Double preco) {
this.id = id;
this.nome = nome;
this.descricao = descricao;
this.preco = preco;
}
Getters e Setters...
<form id="produtosForm" action="<c:url value="/produtos" />" method="post"">
<fieldset>
<legend>Adiciona Produto</legend>
<label for="nome">Nome:</label>
<input id="nome" class="required" minlength="3" type="text" name="produto.nome" value="${produto.nome}" />
<label for="descricao">Descrição:</label>
<textarea cols="28" rows="6" id="descricao" class="required" maxlength="40" name="produto.descricao">${produto.descricao}</textarea>
<label for="preco">Preço:</label>
<input id="preco" min="0" name="produto.preco" value="${produto.preco}" />
<button type="submit">Enviar</button>
</fieldset>
</form>
<!-- <script type="text/javascript">
$('#produtosForm').validate();
</script> -->
@Resource
public class ProdutoController {
private ProdutoDAO dao;
private Result result;
private Validator validator;
public ProdutoController(ProdutoDAO dao, Result result, Validator validator) {
this.dao = dao;
this.result = result;
this.validator = validator;
}
@Post
@Path("/produtos")
//@Restrito
public void adiciona(Produto produto) {
// if (produto.getNome() == null || produto.getNome().length() < 3) {
// this.validator.add(new ValidationMessage("Nome é obrigatório e precisa ter mais de 3 letra", "produto.nome"));
// }
//
// if (produto.getDescricao() == null || produto.getDescricao().length() > 40) {
// this.validator.add(new ValidationMessage("Descição é obrigatória não pode ter mais que 40 letras", "produto.descricao"));
// }
//
// if (produto.getPreco() == null) {
// this.validator.add(new ValidationMessage("Preço precisa ser positivo", "produto.preco"));
// }
// this.validator.onErrorUsePageOf(ProdutoController.class).formulario();
this.dao.salva(produto);
// this.result.redirectTo(this).lista();
}
import br.com.caelum.vraptor.ioc.Component;
import br.com.mabs.goodbuynew.model.Produto;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;
@Component
public class ProdutoDAO {
public Objectify ofy;
public ProdutoDAO() {
this.ofy = ObjectifyService.begin();
}
public void salva(Produto produto) {
this.ofy.put(produto);
}
br.com.caelum.vraptor.http.InvalidParameterException: unable to instantiate type class br.com.mabs.goodbuynew.model.Produto
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createOgnlContextFor(OgnlParametersProvider.java:186)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createParameter(OgnlParametersProvider.java:140)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.getParametersFor(OgnlParametersProvider.java:96)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.getParametersFor(ParametersInstantiatorInterceptor.java:107)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:79)
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.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:23)
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.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:94)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:351)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: net.vidageek.mirror.exception.MirrorException: Could not find constructor with args [] on class br.com.mabs.goodbuynew.model.Produto
at net.vidageek.mirror.invoke.ConstructorHandlerByArgs.getConstructor(ConstructorHandlerByArgs.java:53)
at net.vidageek.mirror.invoke.ConstructorHandlerByArgs.withArgs(ConstructorHandlerByArgs.java:36)
at net.vidageek.mirror.invoke.ConstructorHandlerByArgs.withoutArgs(ConstructorHandlerByArgs.java:32)
at br.com.caelum.vraptor.http.ognl.GenericNullHandler.instantiate(GenericNullHandler.java:74)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createOgnlContextFor(OgnlParametersProvider.java:184)
... 41 more
Abraço!