Вы должны проверить исключение, которое должно дать вам номер строки NPE. С точки зрения вашего кода:
HttpSession session = request.getSession(true);
Запрос может быть нулевым. Это очень маловероятно.
String uId = session.getAttribute("userId").toString();
Сессия может быть нулевой. Это означает, что клиент не отправляет обратно cookie сеанса, или, возможно, у вас есть несколько внешних интерфейсов, а другой записал сеанс. Нам нужно больше информации, чтобы понять, в чем проблема.
Также может быть, что session.getAttribute("userId")
возвращает ноль. Я бы сказал, что это наиболее вероятно. Может быть, это другой сеанс, где session.setAttribute("userId", uId);
был вызван. Или, может быть, ваш первоначальный вызов function.getLogin(username, password);
вернул ноль, поэтому вы установили null
в сеансе?
// this is the code that [... is] throwing the NullPointerException
int userId = Integer.parseInt(uId);
Вы не правы. Когда я читаю код Java 1.6, parseInt
никогда не сгенерирует NPE. Вот первая строка в этом методе:
if (s == null) {
throw new NumberFormatException("null");
}
Могу поспорить, что с вашей сессией что-то не так. Я бы предложил использовать отладчик, чтобы выяснить, что установлено неправильно. Printf-отладка также поможет.