[Resolvido] Erro ao gravar dado no banco com VRaptor 3

3 respostas
katsukawa

Pessoal!!! Eu sou iniciante em VRaptor e na verdade, no mundo dos frameworks!! :roll:

Pelo amor de Deus!! :shock: :( :cry: Me ajudem eu não sei mais o que eu faço!!! Tô achando que é bug do VRaptor mas espero que Não!!!

Eu fiz o exemplo do tutorial de 10min do VRaptor. Então acesso minha página formulário em produtos/form. Preencho os dados e clico ok, então ele vai para meu método adiciona na classe ProdutosController e dá o seguinte erro:

19/10/2009 12:00:18 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.InterceptionException: java.lang.NullPointerException
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:72)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:83)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:39)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.multipart.MultipartInterceptor.intercept(MultipartInterceptor.java:74)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.core.URLParameterExtractorInterceptor.intercept(URLParameterExtractorInterceptor.java:35)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:58)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:59)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:87)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:85)
	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:128)
	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:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
	at br.com.jcomputacao.vraptor.controller.ProdutosController.adiciona(ProdutosController.java:28)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:50)
	... 36 more

Minha classe ProdutosController:

package br.com.jcomputacao.vraptor.controller;

import br.com.caelum.vraptor.Resource;
import br.com.jcomputacao.vraptor.dao.ProdutoDao;
import br.com.jcomputacao.vraptor.model.Produto;

import java.sql.SQLException;
import java.util.List;

@Resource
public class ProdutosController {
	
	private ProdutoDao dao;
	
	public ProdutosController() {
	}
	
	public void form () {
	}
	
	public void adiciona(Produto produto) throws SQLException {	
		dao.adiciona(produto);
	}
	
	public List<Produto> lista() {
        return dao.listaTodos();
    }
}

Meu ProdutoDao:

package br.com.jcomputacao.vraptor.dao;
import br.com.jcomputacao.jdbc.ConnectionPool;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.jcomputacao.vraptor.model.Produto;

public class ProdutoDao {
	
	private Connection con;  
	
	public ProdutoDao() throws SQLException {
		this.con = ConnectionPool.getConnection();
	}
	
	public List<Produto> listaTodos() {
        return new ArrayList<Produto>();
    }

	public void adiciona(Produto produto) throws SQLException {
		String sql = "INSERT INTO produto (nome,descricao,preco) VALUES (?,?,?)";
		PreparedStatement stmt;
		
			stmt = con.prepareStatement(sql);
			stmt.setString(1,produto.getNome());
			stmt.setString(2,produto.getDescricao());
			stmt.setDouble(3,produto.getPreco());
			
			stmt.execute();	
			System.out.println("Gravado com Sucesso!");
			
			stmt.close();	
			System.out.println("Conexão Fechada.");
	}
}

Agradeço antecipadamente!! :cry:

3 Respostas

Rafael_Carneiro

O erro é NullPointerException e provavelmente é de programador.

Veja o erro:

@Resource  
  public class ProdutosController {  
  
  private ProdutoDao dao;  
 
  public ProdutosController() {  
  }

Tá faltando você fazer:

@Resource  
  public class ProdutosController {  
  
  private ProdutoDao dao;  
 
  public ProdutosController(ProdutoDao produtoDao) {  
     this.dao = produtoDao;
  }

E anote a classe ProdutoDao com @Component.

katsukawa

@Rafael

Muito Obrigado, era isso mesmo, tava faltando o @Component… :roll:

pq o construtor do ProdutosController estava recebendo ProdutoDao mas aí tava dando erro e eu acabei tirando ele do construtor pq achava q era ele o erro.
O que na verdade faltava a anotação do @Component

É… tenho muito que aprender ainda né… :roll:

Mas vamos lá, é assim, errando e tentando que aprendemos…

Flw!! Obrigadão! :smiley:

Rafael_Carneiro

A documentação do VRaptor 3 está bem rica e quando você tiver dúvidas, basta postar nesse fórum que o ajudaremos.

Criado 19 de outubro de 2009
Ultima resposta 19 de out. de 2009
Respostas 3
Participantes 2