I have a form with a user name field on it when i tab out of the field i use a RESTFUL Web Service that makes a call to a handler method in the controller. The method makes a call to a DAO class that checks the database if the user name exists.
This works fine, however when the form is posted to the server i call the same exact function i would call in the handler method however i get a java.lang.NullPointerException when it accesses the class that makes a call to the DAO object. So it does not even access the DAO object the second time.
I have exception handlers around the calls in all my classes that makes calls. Any ideas as to whats happening here why i would get the java.lang.NullPointerException the second time the function is called.Does this have anything to do with Spring instantiating DAO classes using a Singleton method or something to that effect? What can be done to resolve this?
This is what happens the First Time The Method is called using the Web Service(this is suppose to happen):
13011 [http-8084-2] INFO com.crimetrack.jdbc.JdbcOfficersDAO - Inside jdbcOfficersDAO
13031 [http-8084-2] DEBUG org.springframework.jdbc.core.JdbcTemplate - Executing prepared SQL query
13034 [http-8084-2] DEBUG org.springframework.jdbc.core.JdbcTemplate - Executing prepared SQL statement [SELECT userName FROM crimetrack.tblofficers WHERE userName = ?]
13071 [http-8084-2] DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource
13496 [http-8084-2] DEBUG org.springframework.jdbc.core.StatementCreatorUtils - Setting SQL statement parameter value: column index 1, parameter value [adminz], value class [java.lang.String], SQL type unknown
13534 [http-8084-2] DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource
13537 [http-8084-2] INFO com.crimetrack.jdbc.JdbcOfficersDAO - No username was found in exception
13537 [http-8084-2] INFO com.crimetrack.service.ValidateUserNameManager - UserName :adminz does NOT exist
The Second time When The Form Is 'Post' and a validation method handles the form and calls the same method the web service would call:
17199 [http-8084-2] INFO com.crimetrack.service.OfficerRegistrationValidation - UserName is not null so going to check if its valid for :adminz
17199 [http-8084-2] INFO com.crimetrack.service.OfficerRegistrationValidation - User Name in try.....catch block is adminz
17199 [http-8084-2] INFO com.crimetrack.service.ValidateUserNameManager - Inside Do UserNameExist about to validate with username : adminz
17199 [http-8084-2] INFO com.crimetrack.service.ValidateUserNameManager - UserName :adminz EXCEPTION OCCURED java.lang.NullPointerException
ValidateUserNameManager.java
public class ValidateUserNameManager implements ValidateUserNameIFace {
private OfficersDAO officerDao;
private final Logger logger = Logger.getLogger(getClass());
public boolean DoesUserNameExist(String userName) throws Exception {
logger.info("Inside Do UserNameExist about to validate with username : " + userName);
try{
if(officerDao.OfficerExist(userName) == true){
logger.info("UserName :" + userName + " does exist");
return true;
}else{
logger.info("UserName :" + userName + " does NOT exist");
return false;
}
}catch(Exception e){
logger.info("UserName :" + userName + " EXCEPTION OCCURED " + e.toString());
return false;
}
}
/**
* @return the officerDao
*/
public OfficersDAO getOfficerDao() {
return officerDao;
}
/**
* @param officerdao the officerDao to set
*/
public void setOfficerDao(OfficersDAO officerDao) {
this.officerDao = officerDao;
}
}
JdbcOfficersDAO.java
public boolean OfficerExist(String userName){
String dbUserName;
try{
logger.info("Inside jdbcOfficersDAO");
String sql = "SELECT userName FROM crimetrack.tblofficers WHERE userName = ?";
try{
dbUserName = (String)getJdbcTemplate().queryForObject(sql, new Object[]{userName},String.class);
logger.info("Just Returned from database");
}catch(Exception e){
logger.info("No username was found in exception");
return false;
}
if(dbUserName == null){
logger.info("Database did not find any matching records");
}
logger.info("after JdbcTemplate");
if (dbUserName.equals(userName)) {
logger.info("User Name Exists");
return true;
}else{
logger.info("User Name Does NOT Exists");
return false;
}
}catch(Exception e){
logger.info("Exception Message in JdbcOfficersDAO is "+e.getMessage());
return false;
}
}
OfficerRegistrationValidation.java
public class OfficerRegistrationValidation implements Validator{
private final Logger logger = Logger.getLogger(getClass());
private ValidateUserNameManager validateUserNameManager;
public boolean supports(Class<?> clazz) {
return Officers.class.equals(clazz);
}
public void validate(Object target, Errors errors) {
Officers officer = (Officers) target;
if (officer.getUserName() == null){
errors.rejectValue("userName", "userName.required");
}else{
String userName = officer.getUserName();
logger.info("UserName is not null so going to check if its valid for :" + userName);
try {
logger.info("User Name in try.....catch block is " + userName);
if (validateUserNameManager.DoesUserNameExist(userName)== true){
errors.rejectValue("userName", "userName.exist");
}
} catch (Exception e) {
logger.info("Error Occured When validating UserName");
errors.rejectValue("userName", "userName.error");
}
}
if(officer.getPassword()== null){
errors.rejectValue("password", "password.required");
}
if(officer.getPassword2()== null){
errors.rejectValue("password2", "password2.required");
}
if(officer.getfName() == null){
errors.rejectValue("fName","fName.required");
}
if(officer.getlName() == null){
errors.rejectValue("lName", "lName.required");
}
if (officer.getoName() == null){
errors.rejectValue("oName", "oName.required");
}
if (officer.getEmailAdd() == null){
errors.rejectValue("emailAdd", "emailAdd.required");
}
if (officer.getDob() == null){
errors.rejectValue("dob", "dob.required");
}
if (officer.getGenderId().equals("A")){
errors.rejectValue("genderId","genderId.required");
}
if(officer.getDivisionNo() == 1){
errors.rejectValue("divisionNo", "divisionNo.required");
}
if(officer.getPositionId() == 1){
errors.rejectValue("positionId", "positionId.required");
}
if (officer.getStartDate() == null){
errors.rejectValue("startDate","startDate.required");
}
if(officer.getEndDate() == null){
errors.rejectValue("endDate","endDate.required");
}
logger.info("The Gender ID is " + officer.getGenderId().toString());
if(officer.getPhoneNo() == null){
errors.rejectValue("phoneNo", "phoneNo.required");
}
}
/**
* @return the validateUserNameManager
*/
public ValidateUserNameManager getValidateUserNameManager() {
return validateUserNameManager;
}
/**
* @param validateUserNameManager the validateUserNameManager to set
*/
public void setValidateUserNameManager(
ValidateUserNameManager validateUserNameManager) {
this.validateUserNameManager = validateUserNameManager;
}
}
Update Error Log using Logger.Error("Message", e):
39024 [http-8084-2] INFO com.crimetrack.service.OfficerRegistrationValidation - UserName is not null so going to check if its valid for :adminz
39025 [http-8084-2] INFO com.crimetrack.service.OfficerRegistrationValidation - User Name in try.....catch block is adminz
39025 [http-8084-2] ERROR com.crimetrack.service.OfficerRegistrationValidation - Message
java.lang.NullPointerException
at com.crimetrack.service.OfficerRegistrationValidation.validate(OfficerRegistrationValidation.java:47)
at org.springframework.validation.DataBinder.validate(DataBinder.java:725)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:815)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:367)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
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:127)
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:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
39025 [http-8084-2] INFO com.crimetrack.service.OfficerRegistrationValidation - Error Occured When validating UserName