Как решить проблему nullpointerexception при вызове метода EJB с помощью инжектора @EJB
Когда я вызываю метод EJB со страницы сервлета, я получаю следующую ошибку..
org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [info.java.tips.servlet.MyServlet2] in context with path [/MyFirstWebApplication] threw exception java.lang.NullPointerException at info.java.tips.servlet.MyServlet2.doPost(MyServlet2.java:33) at javax.servlet.http.HttpServlet.service(HttpServlet.java:650) at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
Пожалуйста, помогите, чтобы вам решить этот вопрос
Спасибо,
Что я уже пробовал:
@WebServlet("/MyServlet2") public class MyServlet2 extends HttpServlet { @EJB(mappedName="MailSenderBean") private static MailSenderBean mailsenderbean; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String toEmail = request.getParameter("email"); String subject = request.getParameter("subject"); String message = request.getParameter("message"); String fromemail = "xxxxxxxxxx"; String password ="xxxxxxxxxx"; try(PrintWriter out = response.getWriter()) { mailsenderbean.sendMail(fromemail, toEmail, subject, message, password); out.println("mail sent"); } } }
мой код внутри метода EJB
public void sendMail(String fromEmail,String toEmail,String subject,String message,String password ) { Properties prop = System.getProperties(); prop.put("mail.smtp.host", "smtp.gmail.com"); prop.put("mail.smtp.auth", "true"); prop.put("mail.smtp.port", "465"); prop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); prop.put("mail.smtp.socketFactory.port", "465"); prop.put("mail.smtp.socketFactory.fallback", "false"); Session session = Session.getDefaultInstance(prop,null); session.setDebug(true); Message mailmessage = new MimeMessage(session); try { mailmessage.setFrom(new InternetAddress(fromEmail)); mailmessage.setRecipient(Message.RecipientType.TO, new InternetAddress(toEmail)); mailmessage.setText(message); mailmessage.setSubject(subject); Transport transport = session.getTransport("smtp"); transport.connect("smtp.gmail.com", "xxxxxxxx","xxxxxxx"); transport.sendMessage(mailmessage, mailmessage.getAllRecipients()); } catch (Exception e) { e.printStackTrace(); } }
Richard MacCutchan
Согласно сообщению об ошибке, исключение происходит в строке 33, но у вас есть только 25 строк в вопросе.
khaleelsyed
я разместил конкретный блок кода.когда я удалю нижеприведенную строку
mailsenderbean.sendMail(fromemail, toEmail, тема, сообщение, пароль);
ошибка не возникает.
Richard MacCutchan
Ну что ж, это один из способов исправления ошибок. Но, возможно, будет лучше, если вы узнаете, какая ссылка на переменную равна нулю, и почему.
khaleelsyed
Я обновил вопрос с помощью блока кода внутри EJB. Пожалуйста, обратитесь к главному вопросу.
Richard MacCutchan
Сообщение "Ява.яз.Исключение NullPointerException в info.java.tips.servlet.MyServlet2.doPost(MyServlet2.java:33)" clear говорит вам, что ошибка находится в строке 33, но мы не знаем, к какой строке это относится.
khaleelsyed
код в строке-mailsenderbean.sendMail(fromemail, toEmail, subject, message, password);
Richard MacCutchan
Затем вам нужно использовать свой отладчик, чтобы узнать, какая переменная равна null и почему.
khaleelsyed
я новичок в программировании на java.я запускаю свое приложение tomcat server.как запустить отладчик..
Richard MacCutchan
Извините, я уже много лет не пользовался tomcat. Вам нужно будет ознакомиться с документацией.