inayat
inayat

Reputation: 11

NullPointerexception when executing Mock Controller

I have below code in my controller class

public class GoodsController{

@AutoWired
Private GoodsService goodsService;
public ResponseEntity<String> startCall(HttpServletRequest request) {

        ResponseEntity<String> responseEntity = null;

        try {
            ResponseBean respBean = goodsService.startCall(request);
            HttpHeaders responseHeaders = new HttpHeaders();

            if(request.getAttribute(SessionConstants.GOODS_SESS) != null){
                responseHeaders.set(SessionConstants.GOODS_SESS,      request.getAttribute(SessionConstants.GOODS_SESS).toString());
            }

            responseEntity = new ResponseEntity<>(SessionUtil.objToJson(respBean, respBean), responseHeaders,
                    HttpStatus.valueOf(respBean.getStatus()));

            return responseEntity;

        } catch (AlightSessionException e) {
            StringBuilder message = new StringBuilder("{\"message\": \"error:\""+e.getMessage()+", ")
                    .append("\"status\":\"400\"}");
            responseEntity = new ResponseEntity<>(message.toString(), HttpStatus.BAD_REQUEST);
            ErrorLogEventHelper.logErrorEvent(SessionController.class.getName(), message.toString(), "startSessionForPerson()", e,
                    ErrorLogEvent.ERROR_SEVERITY);      
            return responseEntity;
        }

    }
}

And I have below code in my TestClass

   public class GoodsControllerTest{

    MockHttpServletRequestBuilder request = 

    MockMvcRequestBuilders
                    .post("/startCall").sessionAttr("personToken", "eyjpc");

            ResultActions result = mockMvc.perform(request);
             result.andExpect(MockMvcResultMatchers.status().isOk());

    }
  }

While I am executing I got below error, please help me out.

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:65) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:155) at com.alight.upoint.sessionservice.controller.SessionControllerTest.testGetEligiblePlans(SessionControllerTest.java:57) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) Caused by: java.lang.NullPointerException at com.alight.upoint.sessionservice.controller.SessionController.startSessionForPerson(SessionController.java:51) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ... 17 more

Upvotes: 1

Views: 3405

Answers (1)

lrathod
lrathod

Reputation: 1124

You need to use MockMvcBuilders.standaloneSetup to create an application context with just you controller and then use this mockMcv to call your controller API i.e method

You can refer this post for more details.

Upvotes: 1

Related Questions