Quando Spring Boog esegue il codice della classe @Service ed arriva al punto seguente si interrompe:
Client ... = clientRepository.trovaClient..(...);
generando la seguente eccezione:
java.lang.NullPointerException
null
null
null
ERRORE! Impossibile eseguire il conteggio delle visite.
catch (Exception e){
System.out.println(e);
System.out.println(e.getLocalizedMessage());
System.out.println(e.getMessage());
System.out.println(e.getCause());
System.out.println("ERRORE! Impossibile eseguire il conteggio delle visite.");
}
In pratica questo clientRepository non è proprio presente in Spring Boot, la classe ClientRepository non viene proprio letta!
Non vorrei che oltre a questi @Autowired bisognasse fare del resto.
Ti mostro un codice forse più comprensibile:
Controller:
@Controller
public class ControlloPagineWeb {
@Autowired
private ConteggioVisiteSito conteggioVisiteSito;
public void variabiliGeneraliPerPaginaHTML(
Principal principal,
Model model,
HttpSession session,
HttpServletRequest request,
HttpServletResponse response
){
//...
// Posso aggiungere questo pezzo o non metterlo, conteggioVisiteSito parte in ogni caso...
conteggioVisiteSito = new ConteggioVisiteSito(session, request, response);
}
@RequestMapping(value = { "/", "/benvenuto" }, method = RequestMethod.GET)
public String paginaBenvenuto(
Model model,
Principal principal,
HttpSession session,
HttpServletRequest request,
HttpServletResponse response
) {
variabiliGeneraliPerPaginaHTML(principal, model, session, request, response);
return "index";
}
}
Service:
@Service
public class ConteggioVisiteSito {
@Autowired
private ClientRepository clientRepository;
public ConteggioVisiteSito() {
}
public ConteggioVisiteSito(HttpSession session, HttpServletRequest request, HttpServletResponse response) {
//...
creaSessione(session, request, response);
}
public void creaSessione(HttpSession session, HttpServletRequest request, HttpServletResponse response){
//...
conta(request, response);
}
public void conta(HttpServletRequest request, HttpServletResponse response){
//...
String tipoClient = tipoDiClient(response, ipCookie, idCookie, ipClient);
}
// Questo metodo permette di individuare il tipo di client connesso al sito
public String tipoDiClient(
HttpServletResponse response,
String ipCookie,
String idCookie,
String ipClient
){
//...
// qui si genera l'eccezione che ti ho mostrato perché clientRepository sembra inesistente
Client clientProvider = clientRepository.trovaClient..(...);
}
}
Repository:
@Repository
public class ClientRepository {
@Autowired
private JdbcTemplate jdbcTemplate;
// query verso il dbms postgresql...
}
I metodi della classe @Service funzionano tutti tranne quelli che per lavorare necessitano della classe @Repository. La classe con @Repository non viene caricata in @Service.
Si credo di aver capito bene cosa dovrei fare in questi strati.