简体   繁体   English

使用MyBatis的Java Mapper上的NullPointerException

[英]NullPointerException on java Mapper with MyBatis

I'm getting the NullPointerException and I can't figure out where are my mistakes. 我收到了NullPointerException ,我不知道我的错误在哪里。

The error is in selectByExample function. 错误在selectByExample函数中。 The code is: 代码是:

package com.service.test;

@Service 
public class TestService {
[...]
@Autowired
private TestMapper TestMapper;
[...]

public List<Short> test(){
    List<Short> lista = new ArrayList<Short>();

    testExample me = new testExample();
    me.or().andTestEqualTo(1);
    List<test> listTest = TestMapper.selectByExample(me); //line 81

    for(int i=0; i<listTest.size(); i++){
        lista.add(listTest.get(i).getNuovoDb());
    }

    return lista;
}

Controller.java Controller.java

    TestService ms = new TestService();
    List<Short> listTest = ms.sediMigrate(); //line 46

The applicationContext is the follow: applicationContext是以下内容:

       <!-- enable autowire -->
    <context:annotation-config />
    <context:component-scan base-package="com.service.test"/>
[...]


    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.test.**"/>
        <property name="sqlSessionFactoryBeanName" value="exSqlSessionFactory"/>
    </bean>

Here there is the error: 这里有错误:

[11/07/14 11.19.33:848 CEST] 0000004f servlet E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: Generata eccezione non rilevata in uno dei metodi di servizio del servlet dispatcher nell'applicazione TestEAR. [11/07/14 11.19.33:848 CEST] 0000004f servlet E com.ibm.ws.webcontainer.servlet.ServletWrapper服务SRVE0068E:servozio del servlet调度程序nell'applicazione TestEAR中的Generata eccezione non rilevata。 Creata eccezione: org.springframework.web.util.NestedServletException: Request processing failed; Creata eccezione:org.springframework.web.util.NestedServletException:请求处理失败; nested exception is java.lang.NullPointerException at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863) at javax.servlet.http.HttpServlet.service(HttpServlet.java:738) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1657) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502) at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181) at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3935) at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276) at com.ibm.ws.webcontainer.WebContainer.handle 嵌套的异常是org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)处的java.lang.NullPointerException org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)处的javax.servlet的org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)的.http.HttpServlet.service(HttpServlet.java:738)的javax.servlet.http.HttpServlet.service(HttpServlet.java:831)的。 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939)上的com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1657)。 com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181)处的servlet.ServletWrapper.handleRequest(ServletWrapper.java:502) com.ibm.ws.webcontainer.webapp.WebGroup.handle中的java:3935)com.ibm.ws.webcontainer.WebContainer.handle中的Request(WebGroup.java:276) Request(WebContainer.java:931) at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305) at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83) at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:2 com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)处的com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)处的Request(WebContainer.java:931) com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)上的.ibm.ws.http.channel.inbound.impl.HttpInboundLink.java:452 com上的.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83) .ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)位于com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)位于com.ibm.io.async.AsyncChannelFuture com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)处com.ibm.io.async.ResultHandler.complete(ResultHandler.java:2)的.fireCompletionActions(AsyncChannelFuture.java:161) 04) at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1613) Caused by: java.lang.NullPointerException at com.service.test.TestService.test(TestService.java:81) at com.test.controller.ReturnPage(controller.java:46) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:600) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.han 04)在com.ibm.ws.util上的com.ibm.io.async.ResultHandler $ 2.run(ResultHandler.java:905)在com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)处。 ThreadPool $ Worker.run(ThreadPool.java:1613)由以下原因引起:com.test.controller.ReturnPage(controller.java:com.service.test.TestService.test(TestService.java:81)处的java.lang.NullPointerException 46)at sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)at java.lang.reflect处sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)在org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod处的.Method.invoke(Method.java:600)在org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175) (AnnotationMethodHandlerAdapter.java:446)在org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.han dle(AnnotationMethodHandlerAdapter.java:434) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) ... 25 more org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)的dle(AnnotationMethodHandlerAdapter.java:434)org.springframework的org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)的dle(AnnotationMethodHandlerAdapter.java:434) .web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)...还有25个

[11/07/14 11.19.33:856 CEST] 0000004f FfdcProvider W com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I: Emesso evento FFDC in C:\\Program Files\\IBM\\WebSphere\\AppServer\\profiles\\AppSrv01\\logs\\ffdc\\server1_5e0b5e0b_14.07.11_11.19.33.8537970037945028520402.txt com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest() 309 [11/07/14 11.19.33:857 CEST] 0000004f webapp E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Errore servlet]-[dispatcher]: java.lang.NullPointerException at com.service.test.TestService.test(TestService.java:81) at com.test.controller.ReturnPage(controller.java:46) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:600) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(Handler [11/07/14 11.19.33:856 CEST] 0000004f FfdcProvider W com.ibm.ws.ffdc.impl.FfdcProvider log事件FFDC1003I:C:\\ Program Files \\ IBM \\ WebSphere \\ AppServer \\ profiles \\ AppSrv01 \\中的Emesso甚至到FFDC logs \\ ffdc \\ server1_5e0b5e0b_14.07.11_11.19.33.8537970037945028520520.txt com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest()309 [11/07/14 11.19.33:857 CEST] 0000004f webapp E com.ibm。 ws.webcontainer.webapp.WebApp logServletError SRVE0293E:[错误servlet]-[调度程序]:com.test.controller.ReturnPage(com.service.test.TestService.test(TestService.java:81)处的java.lang.NullPointerException controller.java:46)at sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(Handler上的.lang.reflect.Method.invoke(Method.java:600) MethodInvoker.java:175) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863) at javax.servlet.http.HttpServlet.service(HttpServlet.java:738) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1657) at com.ibm.ws.webcontainer.servlet.ServletW org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)处的MethodInvoker.java:175)org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java: 434)在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)在org.springframework.web.servlet.FrameworkServlet org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)的java.servlet.http.HttpServlet.service(HttpServlet.java:738)的.processRequest(FrameworkServlet.java:961)。位于com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java)上的javax.servlet.http.HttpServlet.service(HttpServlet.java:831)上的web.servlet.FrameworkServlet.service(FrameworkServlet.java:837): 1657),网址为com.ibm.ws.webcontainer.servlet.ServletW rapper.handleRequest(ServletWrapper.java:939) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502) at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181) at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3935) at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276) at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:931) at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305) at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCa com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)的com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:的rapper.handleRequest(ServletWrapper.java:939): 181)位于com.ibm.ws.webcontainer.webapp.Webapp.WebApp.handleRequest(WebApp.java:3935)位于com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)位于com.ibm.ws com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)上的.webcontainer.WebContainer.handleRequest(WebContainer.java:931)在com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java :186),位于com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452),位于com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java :511)在com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)在com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCa llback.java:83) at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1613) com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)上com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)上的llback.java:83) .ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)位于com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)位于com.ibm.io.async.ResultHandler.complete(ResultHandler .java:204)com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)com.ibm.io.async.ResultHandler $ 2.run(ResultHandler.java:905)com.ibm.ws .util.ThreadPool $ Worker.run(ThreadPool.java:1613)

As you use Spring you should avoid explicitly creating your beans (using new operator) - the framework should do it for you. 使用Spring时,应避免显式创建bean(使用new运算符)-框架应为您完成。 And the bean instance should be already in Spring context. 并且bean实例应该已经在Spring上下文中。 If you instantiate your service bean with new nothing will be autowired. 如果用new实例化服务Bean,则不会自动装配任何东西。 Thats why you will have null instead of your mapper instance. 这就是为什么您将使用null而不是您的mapper实例的原因。

Please look info the Spring documentation about dependency injection and beans lifecycle in Spring applications http://docs.spring.io/spring/docs/3.0.x/reference/beans.html#beans-factory-collaborators 请查看有关Spring应用程序中的依赖项注入和bean生命周期的Spring文档http://docs.spring.io/spring/docs/3.0.x/reference/beans.html#beans-factory-collaborators

Update: 更新:

Autowiring TestService into your controller may solve your issue. TestService自动TestService到控制器中可能会解决您的问题。

@Controller
public class Controller {
    @Autowired private TestService testService;
    ...
    @RequestMapping
    public String returnPage() {
        ...
        testService.sediMigrate(); 
        ...
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM