Servlet et java.lang.NullPointerException
Bonjour à tous.
J'ai actuellement un problème avec mon projet sous glassfish et j'ai besoin de votre aide :calim2:.
Je m'explique: Quand j'essaye de me connecter via un formulaire jsp, j'ai une erreur http 500 et l'erreur suivante qui apparaît dans le log de glassfish:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
Avertissement: StandardWrapperValve[LoginServlet]: PWC1406: Servlet.service() for servlet LoginServlet threw exception
java.lang.NullPointerException
at com.google.common.hash.MessageDigestHashFunction$MessageDigestHasher.putString(MessageDigestHashFunction.java:144)
at com.supinfo.supinbank.servlet.LoginServlet.doPost(LoginServlet.java:54)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:722) |
Une ligne attire mon attention, celle de ma(mon :() servlet LoginServlet. Je décide donc de voir ce qui cloche mais tout m'a l'air d'être normal. Je regarde donc la ligne qui semble poser problème:
Code:
1 2
|
HashCode hc = hf.newHasher().putString(password).hash(); |
Voici le code de LoginServlet (je précise que j'utilise une librairie nommée guava):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
@WebServlet(name = "LoginServlet", urlPatterns = {"/login"})
public class LoginServlet extends HttpServlet {
@EJB
private PersonDao personDao;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("index.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
final String email = request.getParameter("email");
final String password = request.getParameter("password");
HashFunction hf = Hashing.sha1();
HashCode hc = hf.newHasher()
.putString(password)
.hash();
final String hashedPassword = hc.toString();
final Person p = personDao.findUserByMail(email);
if (p == null) {
doGet(request, response);
}
else
{
if (p.getPassword().equals(hashedPassword)) {
final HttpSession session = request.getSession();
session.setAttribute("user", String.format("%s %s", p.getFirstName(), p.getLastName()));
if (p.getRole() == UserRole.Advisor) {
session.setAttribute("role", "advisor");
response.sendRedirect(getServletContext().getContextPath() + "/auth/admin/advisor");
}
else
{
session.setAttribute("role", "customer");
session.setAttribute("customer", p);
response.sendRedirect(getServletContext().getContextPath() + "/auth/customer");
}
}
else
{
doGet(request, response);
}
}
}
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
} |
Au cas où, je laisse le code la jsp que j'utilise pour ma connexion:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
<body>
<c:url value="/login" var="loginUrl" />
<form method="POST" action="${loginUrl}" style="padding-top:10px; padding-bottom: -15px;">
<input type="email" name="email" placeholder="Email" required />
<input type="password" name=password" placeholder="Password" required />
<input type="submit" value="Login" class="btn-success" />
</form>
</body> |
J'aimerais que vous m'éclairiez parce que je suis perdu.
Merci d'avance à tous