Nullpointer em classe anotada com @Autowired

15 respostas
R

Prezados,

Estou comecando a fazer uns testes segundo DDD e fiz essa classe de dominio:

public class Disciplina implements Serializable{

	private int id;

	private String denominacao;

	@Transient
	private DisciplinaRepository repository;

	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	@Length(min=3, max=80, message="O campo denominação deve conter entre {min} e {max} caracteres.")
	@Column(length=80,unique=false,nullable=false)
	public String getDenominacao() {
		return denominacao;
	}

	public void setDenominacao(String denominacao) {
		this.denominacao = denominacao;
	}

	@Autowired
	public void setRepository(@Qualifier("disciplinaRepository") DisciplinaRepository repository) {
		this.repository = repository;
	}

	public void save() {
		repository.executePersist(this);
	}

	public void delete() {
		repository.executeDelete(this);
	}

	public List<Disciplina> listAll() {
		return repository.listAll();
	}

	public Disciplina load() {
		return repository.findById(this.id);

	}

}

Estou tomando nullpointer quando tento acessar algum metodo do repository

public List<Disciplina> listAll() {
		return repository.listAll();
	}

Dá nullpointer na linha: return repository.listAll();

Percebi que o setRepository não está sendo chamado.
Essa classe precisa de anotação @component? Já coloquei e já removi, mas continua sem passar pelo setRepository, e acho que por isso está dando nullpointer.
A classe DisciplinaRepository também está anotada com @component...

Sugestões?

15 Respostas

xjunior

Creio que seja;:

return this.repository.listAll();

e em todos os lugares que vc acessa o atributo privado repository, que por sua vez é um objeto.
coloque o this

xjunior

aqui mano, leia mais sobre design patterns, ok?

implementa o design patterns the good citizen patterns (na minha opinião nem deve ser considerado um design pattern, pois é um design muito retardado) no construtor da sua classe e inicializa os objetos lá.

flw brother

R

xjunior:
aqui mano, leia mais sobre design patterns, ok?

implementa o design patterns the good citizen patterns (na minha opinião nem deve ser considerado um design pattern, pois é um design muito retardado) no construtor da sua classe e inicializa os objetos lá.

flw brother

usando o this.repository também dá null pointer.
sobre inicializar os objetos nos construtores, não estou podendo utilizar isto no momento devido a outros problemas… preciso que seja via setter…

zoren

A classe que chama esse método é um componente??

R
de certa forma sim…

<a class="mention" href="/u/resource">@Resource</a>

public class DisciplinaController{

}
zoren

vc está usando qual framework?

VRaptor?

Se for possivel, colocar as classes envolvidas

R

zoren:
vc está usando qual framework?

VRaptor?

Isso…

zoren

Seu disciplinaRepository esta anotado com @Resource??

R

Não. com @component

Paulo_Silveira

Ola

Posta pra gente a stack inteira?

Nao parece ser erro de injecao, pois teria dado erro antes, quando ele nao conseguisse injetar o repository

Mas o SPring/VRaptor nao vao injetar ai um DisiciplinaRepository se voce der new nesse objeto voce mesmo, ou se for o hibernate que vai puxar isso. Essa eh uma das complicacoes de DDD, em como injetar um repository nas entidaes. Algumas pessoas fazem isso por interceptor no Hibernate, acho que pode complicar demais.

R

Paulo Silveira:

Mas o SPring/VRaptor nao vao injetar ai um DisiciplinaRepository se voce der new nesse objeto voce mesmo, ou se for o hibernate que vai puxar isso. Essa eh uma das complicacoes de DDD, em como injetar um repository nas entidaes. Algumas pessoas fazem isso por interceptor no Hibernate, acho que pode complicar demais.

Então vou ter que mudar de estratégia, pelo que vi, estou fazendo isso mesmo…
Segue o stack, mas acho que nao vai rolar desta forma não…

br.com.caelum.vraptor.InterceptionException: java.lang.NullPointerException at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:77) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46) 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:41) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.architecture.locales.LocalesInterceptor.intercept(LocalesInterceptor.java:71) at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.architecture.errorbehavior.ErrorInterceptor.intercept(ErrorInterceptor.java:31) at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.architecture.vraptor.ContextProvaiderInterceptor.intercept(ContextProvaiderInterceptor.java:26) at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41) 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:46) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62) at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91) at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55) at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88) 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(Thread.java:595) Caused by: java.lang.NullPointerException at br.com.caelum.meta.domain.Disciplina.listAll(Disciplina.java:84) at br.com.caelum.architecture.controller.ControllerDDD.defaultList(ControllerDDD.java:35) at br.com.caelum.architecture.controller.ControllerDDD.home(ControllerDDD.java:59) at br.com.caelum.meta.controller.DisciplinaController.home(DisciplinaController.java:73) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:50)

Lucas_Cavalcanti

olá rmp,

eu fiz isso que vc quer fazer em um dos meus projetos:

dá uma olhada no pacote de infra, e como ficam as classes de modelo…

se quiser uma explicação detalhada me avisa

R

Lucas Cavalcanti:
olá rmp,

eu fiz isso que vc quer fazer em um dos meus projetos:

dá uma olhada no pacote de infra, e como ficam as classes de modelo…

se quiser uma explicação detalhada me avisa

Estou fazendo bem parecido com a forma que voce faz no calopsita… inclusive estou testando a injeção via constructor também…
mas ele não está injetando… continua dado nullpointer…

Lucas_Cavalcanti

vc precisa usar o iogi… que é um componente opcional do vraptor… ele possibilita injeção nos parâmetros dos métodos do controller

é só colocar o iogi.jar que tá no lib/optional do vraptor, e criar um CustomProvider como está no calopsita

R

lucas,

valeu pela ajuda!
Tudo certo agora!

Criado 29 de janeiro de 2010
Ultima resposta 2 de fev. de 2010
Respostas 15
Participantes 5