Java.lang.NullPointerException

Bom dia Pessoal, estou precisando de ajuda. Sou novato em Java e como aqui estão os melhores nessa linguagem resolvi recorrer a vocês para aprender um pouquinho com quem sabe. Estou implementando testes unitários no meu projeto usando o JUnit, porém, ao tentar rodar o meu teste pelo JUnit recebo esta mensagem: java.lang.NullPointerException - at br.com.issx.tipologia.controller.auxiliary.document.SizesControllerTest.testSave(SizesControllerTest.java:21), nesta linha tenho a seguinte sintaxe: List lista = sizeDao.listAll();
Alguém daqui do fórum já passou por este problema que pudesse me dar uma ajuda?
Desde já agradeço a todos!

Se você fizer uma pesquisa no GUJ mesmo sobre NullPointerException eu nem sei quantos posts você vai encontrar, de tão comum que é esse erro.

Acontece que você está tentando utilizar uma variável que está nula.

Bem vindo ao GUJ :slight_smile:

[quote=Rodrigo Sasaki]Se você fizer uma pesquisa no GUJ mesmo sobre NullPointerException eu nem sei quantos posts você vai encontrar, de tão comum que é esse erro.

Acontece que você está tentando utilizar uma variável que está nula.

Bem vindo ao GUJ :)[/quote]Exato.

Veja nessa linha: SizesControllerTest.java:21

Alguém ai está null. Falta você dar um novo valor ao atributo.

Ah, bem vindo ao guj! =D

Obrigado pelas boas vindas Rodrigo! Quanto a esta pesquisa do NullpoiterException eu até fiz, só que cada NullPointer é diferente do outro, digo em problemas. Quanto a variável nula, a única que vejo é o meu size.setId, vejam:

public class SizesControllerTest extends TestCase {

private SizeDao sizeDao;

@Test
public void testSave() {
	Size size = new Size();
	size.setName("Teste");
	size.setId(null);
	
	List<Size> lista = sizeDao.listAll();  
	assertNotNull(size.getName());
	
	for(Size tmp : lista){  
		System.out.println(tmp.getName());
		System.out.println(tmp.getId());
	}
	sizeDao.save(size);
}

}

Por favor, sempre que for postar código, o poste entre as tags [code][ /code], Leia o nosso How To para conhecer as regras do fórum e umas dicas sobre como postar.

Vou te dar uma colher de chá. É seu sizeDAO que está null.

Você mesmo disse qual linha dava o erro.

OPs, descula Rodrigo. Como disse sou novato, esse é o meu primeiro post. Depois vou dar uma olhada no link do how to.
E Hebert, obrigado pelas boas vindas também! Desculpe, só agora dei um refresh na page e vi o seu post. :smiley:
Um amigo me sugeriu substituir: a linha “private SizeDao sizeDao;” por: “private SizeDao sizeDao = new SizeDao();”, assim que substitui o Eclipse já reclamou: “Cannot instantiate the type SizeDao”

Oh my God!

:cry:

SizeDAO provavelmente é uma interface.

Estou vendo que você está tendo vários problemas porque está tentando partir pro avançado sem ter conhecimentos sólidos no básico.

Eu sugiro que você procure algum livro/apostila/tutorial sobre Java Básico e OO, pois vai ser de grande ajuda pra você.

Quando entender bem orientação a objetos você tira isso de letra.

Eu sei Rodrigo, estou estudando: baixei as apostilas da Caelum FJ11 - FJ21 - FJ16. Porém vou levar um tempinho pra ler isto tudo. :wink: rsrsrs…
De qualquer forma, vou continuar tentando aqui.

A ideia é que você não pode instanciar uma interface.

Você deve ter algum SizeDAOImpl aí, que implemente SizeDAO ou algo do tipo. Pode tentar dar um new nele.

É Rodrigo, estou descobrindo isso aos poucos, rsrsrs… Então, tenho sim o DaoImpl e vi que ele não tinha o método List, acabei de criá-lo fazendo uma simples consulta HQL já que é só pra listar os sizes, daí volto pro meu teste e o danado do NullPointerException não me abandona… hehehe.

mas você adicionou aquela linha? sizeDAO = new SizeDAOImpl();

Você diz no meu SizeDaoImpl ou no meu ControllerTest?
O meu DaoImpl está assim:

@Component
public class SizeDaoImpl extends GenericDaoImpl<Size, Long> implements SizeDao {

	public SizeDaoImpl(Session session) {
		super(session);
	}

	@Override
	public void save(Size size) {
		// TODO Auto-generated method stub
		
	}
	public List<Size> listAll() {
		String hql = "from size";

		Query query = session.createQuery(hql);

		return query.list();
	}
	
}

Usando as dicas do How To! :wink:

No teste mesmo, aonde acontece o problema.

Bom, essa é a minha classe teste, nela eu tenho na linha 3 o “private SizeDao sizeDao”, eu substituo, ou adiciono o que você recomendou abaixo dessa linha?!
Isso que eu não consegui entender direito?!

public class SizesControllerTest extends TestCase {

	private SizeDao sizeDao;
	
	/**
	* @uml.property  name="dao"
	* @uml.associationEnd  multiplicity="(1 1)"
	*/

	@Test
	public void testSave() {
		Size size = new Size();
		size.setName("Teste");
		size.setId(null);
		
		List<Size> lista = sizeDao.listAll(); 

		assertNotNull(size.getName());
		
		for(Size tmp : lista){  
			System.out.println(tmp.getName());
			System.out.println(tmp.getId());
		}
		sizeDao.save(size);
	}
}

antes de você chamar sizeDao.listAll() você precisa inicializar o objeto.

Pode ser logo na linha anterior se preferir.

Voltei, depois de um pouco de batalha eu consegui resolver o problema de NullPointerException. fiz mais ou menos o que você me recomendou Rodrigo:

private SizeDao sizeDao = new SizeDaoImpl();

O erro que aparece agora é outro: junit.framework.AssertionFailedError: Exception in constructor: testSave (java.lang.Error: Unresolved compilation problem: Cannot instantiate the type SizeDaoImpl - at br.com.issx.tipologia.controller.auxiliary.document.SizesControllerTest.(SizesControllerTest.java:16)
Já tentei algumas coisas mas não consegui resolver. :cry:

Aí Hebert, gostaria de parabenizá-lo pelo seu Blog, já vi que vou dedicar algumas horinhas a ele. Tem muito material bom lá.
Obrigado e mais uma vez, parabéns!