[RESOLVIDO] @autoWired não funciona, userService causando nullPointerException

Galera, estou passando por um problema aqui, e não consigo resolver. Já procurei no forum, mas também nao vi soluções. Alguem dá esse help please?

O erro acontece quando tento salvar o fomulário com os dados do usuário. Achei que pudesse estar mandando o objeto usuário nulo, porém acho que não é isso. Pois quando altero a requisição uma simples consulta (getAllUsers) no mesmo repository o erro continua.

Já verifiquei muitas vezes para ver se não esqueci de inicializar alguma variável de instância ou objeto, porém também não achei nada de errado.

Quando o acesso ao repository é realizado via RequestMapping, e não pela submissão do form
funciona corretamente.

Alguém sabe o que pode está acontecendo? Desde já agradeço a disponibilidade.

ago 14, 2018 10:39:02 AM com.sun.faces.lifecycle.InvokeApplicationPhase execute
ADVERTÊNCIA: java.lang.NullPointerException
javax.el.ELException: java.lang.NullPointerException
	at org.apache.el.parser.AstValue.invoke(AstValue.java:260)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:813)
	at javax.faces.component.UICommand.broadcast(UICommand.java:300)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:764)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1388)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
	at br.com.jamming.controller.RegisterUserMB.save(RegisterUserMB.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 org.apache.el.parser.AstValue.invoke(AstValue.java:247)
	... 33 more

ago 14, 2018 10:39:02 AM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
GRAVE: java.lang.NullPointerException
	at br.com.jamming.controller.RegisterUserMB.save(RegisterUserMB.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 org.apache.el.parser.AstValue.invoke(AstValue.java:247)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:813)
	at javax.faces.component.UICommand.broadcast(UICommand.java:300)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:764)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1388)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)

MagagedBean:

@ManagedBean
@RequestScope
public class RegisterUserMB {
	
	@Autowired
	private UserService userService;

	private User user = new User();
	
	private String confirmPw;
	
	public String save() {
		userService.addUser(user);
		return "";			
	}

Service:

@Service
public class UserService {

	@Autowired
	UserRepository<User> userRepository;
	
	@Transactional
	public boolean addUser(User user) {
		return userRepository.save(user) != null;
	}

Repository:

public interface UserRepository<U> extends CrudRepository<User, Long> {
	
	
}

xhtml:

	<h:form>
					<h:panelGrid columns="2" style="border:none">
						<p:inputText id="name" value="#{registerUserMB.profileUser.name}" placeholder="Name"  /> 
						<p:inputText id="surname" value="#{registerUserMB.profileUser.surname}" placeholder="Surname" />
					</h:panelGrid>
					<h:panelGrid>
						<p:inputText id="mail" value="#{registerUserMB.user.mail}" placeholder="E-mail" size="46" />	
					</h:panelGrid>
					<h:panelGrid columns="2">
						<p:password id="password" value="#{registerUserMB.user.password}" feedback="true" inline="true" placeholder="Password" match="PasswordConf" />
						<p:password id="PasswordConf" value="#{registerUserMB.confirmPw}"  placeholder="Password confirmation"/>
						<p:calendar id="brithday" value="#{registerUserMB.profileUser.dateOfBrithday}" placeholder="Brithday" /><h:outputLabel value="" />
						<p:inputText id="cellphone" value="#{registerUserMB.user.cellphone}" placeholder="Cellphone"/>
					</h:panelGrid>
					<p:commandButton value="Save" actionListener="#{registerUserMB.save}"/>
					</h:form>

Obrigado!!

O que tem na linha 28 da classe RegisterUserMB?

@Autowired
	private UserService userService; 

private User user = new User();

public String save() {
       -->		userService.addUser(user);
    		return "";
    				
    	}

o erro tá na requisição da camada de Serviço. Lá na camada de Serviço está da seguinte forma:

@Service
public class UserService {

	@Autowired
	UserRepository<User> userRepository;
	
	@Transactional
	public boolean addUser(User user) {
		return userRepository.save(user) != null;
	}
}

É meio complicado por que você ignora completamente todo e qualquer tratamento de exceção, seja no service ou no controller.
você chegou a debugar para ver se a requisição chega ao service ou não?

@darlan_machado primeiramente respondendo a sua crítica sobre o tratamento de exceção. Na verdade eu agradeço por comentar a respeito, como sou iniciante, recebo isso como uma forma de buscar melhorar esse ponto. Obrigado, vou pesquisar a respeito, se tiver algo a contribuir, estou aceitando! =)

Sim, debuguei, não chega a chamar o service não. Mas acabei de observar uma questão que não tinha reparado antes.

Na hora da chamada do userService.addUser(user), acabei de notar que o objeto userService está nulo. Possivelmente esse é o erro né?

acho que a anotação @Autowired não está funcionando, correto?

Segue print da minha tela:


.
Grato!

Pessoal,consegui resolver a questão!

O problema era que o Spring e JSF precisam de uma configuração para funcionarem juntos.
Motivo pelo qual o meu userService estava ficando nulo, pois o @autoWired não funcionava sem essa integração.

Foi necessário acrescentar o seguinte código no faces-config.xml.

Obrigado pela atenção @darlan_machado

<application>
    <el-resolver>
        org.springframework.web.jsf.el.SpringBeanFacesELResolver
    </el-resolver>
</application>

A quem tiver interesse:
https://www.concretepage.com/spring-4/spring-4-jsf-2-integration-example-using-autowired-annotation

Obrigado!