-1

I'm getting this error

ERROR

org.springframework.web.util.NestedServletException: 
Request processing failed; nested exception is java.lang.NullPointerException
...
root cause
java.lang.NullPointerException
    com.javalabs.web.service.UserService.get(UserService.java:22)

I've configured bean with config and component-scan package

UserService.java

@Service("userService")
public class UserService {

    private UserDao userDao;

    @Autowired
    private void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public User get(String username){
        return userDao.get(username);  //Error in this line userDao = null
    }
...

TaskController.java

@Controller
public class TaskController {

    ...
    private UserService userService;
        ...

    @Autowired
    public void setCategoryService(CategoryService categoryService) {
        this.categoryService = categoryService;
    }
...
    @RequestMapping(value = "/docreatetask", method = RequestMethod.POST)
    public String doCreateTask(Model model, @Valid Task task,
            BindingResult result, Principal principal,
            @RequestParam(value = "delete", required = false) String delete) {
        System.out.println(">TaskController doCreateTask " + task + " | delete: "+ delete);

        if (result.hasErrors()) {
            System.out.println("/docreatetask in here");
            model.addAttribute("task", task);
            return "createtask";
        }

        if(delete == null){
            String username = principal.getName();
            task.setIdUser(new UserService().get(username).getIdUser());
            task.setDate(new Date());
            taskService.create(task);
            System.out.println(">TaskController: Form does validate");
            return "taskcreated";   
        }
        else {
            return "taskdeleted";           
        }
    }
...

Any ideas?

Joe
  • 7,749
  • 19
  • 60
  • 110

1 Answers1

1

Here's the problem:

task.setIdUser(new UserService().get(username).getIdUser());

You're manually creating the bean. You should let Spring create the bean and use it.

Just auto wire the UserService in your TaskController class:

@Controller
public class TaskController {
    @Autowired
    UserService userService;

    //...
    @RequestMapping(value = "/docreatetask", method = RequestMethod.POST)
    public String doCreateTask(Model model, @Valid Task task,
            BindingResult result, Principal principal,
            @RequestParam(value = "delete", required = false) String delete) {
        //current code...
        task.setIdUser(userService.get(username).getIdUser());
        //rest of your code...
    }
}
Luiggi Mendoza
  • 85,076
  • 16
  • 154
  • 332