@Autowired Spring + Hibernate + Annotation时SessionFactory上的空指针异常

时间:2017-09-20 06:08:18

标签: java spring hibernate annotations autowired

我正在尝试以下代码从postman获取数据并将其存储在DB中。但是发生了nullPointerException。

web.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
                    classpath:applicationContext.xml
        </param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>
            com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.cherry.copayimps</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>       
    </servlet>

    <servlet-mapping>
        <servlet-name>jersey-serlvet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

<!--    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


    -->


</web-app>

spring-servlet.xml如下

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"   xmlns:mvc="http://www.springframework.org/schema/mvc"   xmlns:context="http://www.springframework.org/schema/context"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans       
        http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://www.springframework.org/schema/context   
        http://www.springframework.org/schema/context/spring-context.xsd">

    <mvc:annotation-driven />   <mvc:default-servlet-handler />     

</beans>

这是我的DAO Impl代码

@Repository
public class AddBeneficiaryDaoImpl implements AddBeneficiaryDao {
    private SessionFactory sessionFactory;

    @Autowired
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;

    }

    @Override
    public void insertBeneRegistration(AddBeneficiaryModel beneDetails) {
        System.out.println("Inside insertBeneRegistration");
        System.out.println("Session Factory " + sessionFactory);
        Session session = sessionFactory.openSession();
        System.out.println("session : " + session);
        try {
            Transaction tx = session.beginTransaction();
            session.save(beneDetails);
            tx.commit();
        } finally {
            session.close();
        }

    }
}

错误如下

> Sep 20, 2017 11:38:55 AM
> com.sun.jersey.api.core.PackagesResourceConfig init INFO: Scanning for
> root resource and provider classes in the packages:  
> com.cherry.copayimps Sep 20, 2017 11:38:55 AM
> com.sun.jersey.api.core.ScanningResourceConfig logClasses INFO: Root
> resource classes found:   class
> com.cherry.copayimps.controller.AddBeneficiaryRestAPI Sep 20, 2017
> 11:38:55 AM com.sun.jersey.api.core.ScanningResourceConfig init INFO:
> No provider classes found. Sep 20, 2017 11:38:55 AM
> com.sun.jersey.spi.spring.container.servlet.SpringServlet getContext
> INFO: Using default applicationContext Sep 20, 2017 11:38:55 AM
> com.sun.jersey.spi.spring.container.SpringComponentProviderFactory
> registerSpringBeans INFO: Registering Spring bean,
> addBeneficiaryRestAPI, of type
> com.cherry.copayimps.controller.AddBeneficiaryRestAPI as a root
> resource class Sep 20, 2017 11:38:55 AM
> com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
> INFO: Initiating Jersey application, version 'Jersey: 1.9.1 09/14/2011
> 02:05 PM' Got the data Inside insertBeneRegistration Session Factory
> null Sep 20, 2017 11:38:57 AM
> com.sun.jersey.spi.container.ContainerResponse
> mapMappableContainerException SEVERE: The RuntimeException could not
> be mapped to a response, re-throwing to the HTTP container
> java.lang.NullPointerException    at
> com.cherry.copayimps.dao.AddBeneficiaryDaoImpl.insertBeneRegistration(AddBeneficiaryDaoImpl.java:28)
>   at
> com.cherry.copayimps.process.AddBeneficiaryProcess.addBeneProcess(AddBeneficiaryProcess.java:38)
>   at
> com.cherry.copayimps.controller.AddBeneficiaryRestAPI.addBeneficiary(AddBeneficiaryRestAPI.java:27)
>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>   at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>   at java.lang.reflect.Method.invoke(Method.java:498)     at
> com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
>   at
> com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
>   at
> com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
>   at
> com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
>   at
> com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
>   at
> com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
>   at
> com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
>   at
> com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
>   at
> com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
>   at
> com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
>   at
> com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
>   at
> com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
>   at
> com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
>   at
> com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
>   at
> com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708)
>   at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
>   at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
>   at
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
>   at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
>   at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
>   at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
>   at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
>   at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475)
>   at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
>   at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
>   at
> org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
>   at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
>   at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
>   at
> org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498)
>   at
> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
>   at
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796)
>   at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1366)
>   at
> org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
>   at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>   at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>   at
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>   at java.lang.Thread.run(Thread.java:748)
> 
> Sep 20, 2017 11:38:57 AM org.apache.catalina.core.StandardWrapperValve
> invoke SEVERE: Servlet.service() for servlet [jersey-serlvet] in
> context with path [/copayimps] threw exception
> java.lang.NullPointerException    at
> com.cherry.copayimps.dao.AddBeneficiaryDaoImpl.insertBeneRegistration(AddBeneficiaryDaoImpl.java:28)
>   at
> com.cherry.copayimps.process.AddBeneficiaryProcess.addBeneProcess(AddBeneficiaryProcess.java:38)
>   at
> com.cherry.copayimps.controller.AddBeneficiaryRestAPI.addBeneficiary(AddBeneficiaryRestAPI.java:27)
>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>   at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>   at java.lang.reflect.Method.invoke(Method.java:498)     at
> com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
>   at
> com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
>   at
> com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
>   at
> com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
>   at
> com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
>   at
> com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
>   at
> com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
>   at
> com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
>   at
> com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
>   at
> com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
>   at
> com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
>   at
> com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
>   at
> com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
>   at
> com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
>   at
> com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708)
>   at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
>   at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
>   at
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
>   at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
>   at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
>   at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
>   at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
>   at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475)
>   at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
>   at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
>   at
> org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
>   at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
>   at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
>   at
> org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498)
>   at
> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
>   at
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796)
>   at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1366)
>   at
> org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
>   at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>   at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>   at
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>   at java.lang.Thread.run(Thread.java:748)

请完成。如果还需要其他任何内容,请询问,我会更新

提前致谢

1 个答案:

答案 0 :(得分:0)

在applicationContext.xml中添加它

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="org.postgresql.Driver" />

    <property name="url" value="jdbc:postgresql://127.0.0.1/dbname"  /> 
    <property name="username" value="postgres" /> 
    <property name="password" value="postgres" /> 
    <property name="url" value="jdbc:postgresql://localhost:5432/sangamam" />
    <property name="username" value="sangamam" />
    <property name="password" value="sangamam" />

    <property name="defaultAutoCommit" value="false" />
    <property name="testOnBorrow" value="true" />
    <property name="validationQuery" value="select 1" />
    <property name="maxWait" value="3600000" />
    <property name="timeBetweenEvictionRunsMillis" value="1800000" />
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="com.mmf.model" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
            <prop key="hibernate.show_sql">false</prop>
            <prop key="hibernate.sql_comments">false</prop>
            <prop key="hibernate.format_sql">false</prop>
            <prop key="hibernate.generate_statistics">false</prop>
            <prop key="hibernate.jdbc.use_streams_for_binary">false</prop>
            <!--<prop key="hibernate.hbm2ddl.auto">validate</prop> -->

            <!--prop key="hibernate.cache.use_second_level_cache">true</prop> <prop 
                key="hibernate.cache.use_query_cache">true</prop> <prop key="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</prop -->

            <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider
            </prop>
            <prop key="hibernate.c3p0.min_size">5</prop>
            <prop key="hibernate.c3p0.max_size">100</prop>
            <prop key="hibernate.c3p0.max_statements">25</prop>
            <prop key="hibernate.c3p0.timeout">1800</prop>
            <prop key="hibernate.c3p0.acquire_increment">5</prop>
            <prop key="hibernate.c3p0.idle_test_period">1800</prop>
        </props>
    </property>
    <property name="entityInterceptor">
        <bean class="com.mmf.repository.listener.UserAndDateInterceptor" />
    </property>
</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager"
    proxy-target-class="true" />