Nullpointerexception java

Firstly, I am an experienced programmer, but very little familiar with Java. I have two years of experience working with him eight years ago.

I get a NullPointerException in the following code:

public static void handle(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException { Response gfexResponse = null; try { ActionFactory actionFactory = ActionFactory.getInstance(); String requestURL = request.getRequestURI(); String actionId = actionFactory.getActionId(requestURL); IAction action = actionFactory.createAction(actionId); ActionEvent event = new ActionEvent(request, 0, actionId); gfexResponse = action.execute(event); } catch (Exception ex) { gfexResponse = new Response(); gfexResponse.setError(ex.getMessage()); gfexResponse.setOutcome(IViewConstants.ERROR); } finally { if(request.getParameter("loginId") != null){ request.setAttribute("loginId", request.getParameter("loginId")); } if(gfexResponse.getMessage()!= null){ request.setAttribute("message", gfexResponse.getMessage()); } if(gfexResponse.getError()!= null){ request.setAttribute("error", gfexResponse.getError()); } if (gfexResponse.getContentType() != null) { response.setContentType(gfexResponse.getContentType()); OutputStream outputStream = response.getOutputStream(); outputStream.write(gfexResponse.getOutputData()); outputStream.flush(); outputStream.close(); } if(gfexResponse.getOutcome() != null){ RequestDispatcher dispatcher = request.getRequestDispatcher(gfexResponse.getOutcome()); dispatcher.forward(request, response); } } } 

Here's the StackTrace:

 [6/18/13 17:10:04:518 GMT] 00000023 ServletWrappe E SRVE0068E: Uncaught exception thrown in one of the service methods of the servlet: GfexServlet. Exception thrown : java.lang.NullPointerException at com.svl.gfex.handlers.RequestHandler.handle(RequestHandler.java:44) at com.svl.gfex.servlets.GfexServlet.processRequest(GfexServlet.java:43) at com.svl.gfex.servlets.GfexServlet.doPost(GfexServlet.java:39) at javax.servlet.http.HttpServlet.service(HttpServlet.java:763) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:966) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:907) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:118) at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:701) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:646) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:475) at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:463) at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3129) at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:238) at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:811) at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1433) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:93) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:465) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:394) at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102) at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:152) at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:213) at com.ibm.io.async.AbstractAsyncFuture.fireCompletionActions(AbstractAsyncFuture.java:195) at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136) at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:194) at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:741) at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:863) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1510) 

The stacktrace element points to this line:

  if(gfexResponse.getMessage()!= null){ <-------- this line request.setAttribute("message", gfexResponse.getMessage()); } 

This code was maintained by an offshore contractor, but the company fired all contractors. For my sins, they gave me work to correct it.

If anyone can help me understand why I am getting this error, I would appreciate it.

+7
source share
5 answers

This error indicates that the gfexResponse object gfexResponse is null (i.e. action.execute(event) returns null in the above code, and no exception is thrown)

+11
source

Your main plan is this:

 public static void handle(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException { Response gfexResponse = null; try { //Try to get your gfexResponse } catch (Exception ex) { //Provide a default gfexResponse } finally { //Do some stuff with gfexResponse } } 

This is bad practice: you are trying to use exception handling to control flow. Also, you assume that the method you use to get gfexResponse will throw an exception if it fails, which is obviously not. (Some simple debugging / tracing will open this directly.)

What you should do is the following:

 public static void handle(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException { Response gfexResponse = null; try { //Try to get your gfexResponse //Make sure you got your response object and throw SomeAppropriateException if not //Do some stuff with gfexResponse } catch (SomeAppropriateException e) { //properly handle this case } catch (Exception ex) { //properly handle the general case that something else failed (But you should try to be more specific) } finally { //remove any resources that might not be properly cleaned up if an exception is thrown. } } 
+4
source

In fact, the problem lies in the line gfexResponse = action.execute(event);

only the random line in the bottom line to get NPE here gfexResponse is null

 if(gfexResponse.getMessage()!= null){ <-------- this line 

change it to

 if(gfexResponse!=null && gfexResponse.getMessage()!= null){ <-------- this line 
+1
source

Are you sure gfexResponse gets the actual value from action.execute(event); (in try {} )? I assume action.execute(event); returns null.

+1
source

To solve the immediate pain - your call action.execute(event); most likely will return null . However, this can be mitigated in several ways:

  • Zero check or
  • Including a try-catch in a separate method call to return a Response .

From there, the finally block becomes the main focus of your method, and you can check the null value without worrying about finally .

+1
source

All Articles