2014-10-03 3 views
-1

Я использую Spring с hibernate и получаю null как sessionFactory, когда пытаюсь сохранить свои данные. Я стараюсь, но не могу найти, почему я получаю sessionFactory как null;java.lang.NullPointerException: sessionfactory is null

Ниже приведены мои XML и Java классы

SEVERE: Servlet.service() for servlet [spring] in context with path [/River] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause 
    java.lang.NullPointerException 
     at river.amit.com.dao.LoginDao.savePerson(LoginDao.java:19) 
     at river.amit.com.service.LoginService.saveLogin(LoginService.java:18) 
     at river.amit.com.LoginController.handleRequest(LoginController.java:28) 
     at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) 
     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
     at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
     at java.lang.Thread.run(Unknown Source) 







<?xml version="1.0" encoding="UTF-8"?> 
    <beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
     <bean id="viewResolver"  class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
      <property name="prefix"> 
       <value>/WEB-INF/jsp/</value> 
      </property> 
      <property name="suffix"> 
       <value>.jsp</value> 
      </property> 
     </bean> 
     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
      <property name="mappings"> 
      <props> 
       <prop key="/hello.html">helloController</prop> 
       <prop key="/login.html">loginController</prop> 
      </props> 
      </property> 
     </bean> 
     <bean id="helloController" class="river.amit.com.HelloWorldController"/> 
     <bean id="loginController" class="river.amit.com.LoginController"/> 
     <bean id="localeChangeInterceptor"  class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
      <property name="paramName" value="hl" /> 
     </bean> 
     <bean id="localeResolver"  class="org.springframework.web.servlet.i18n.SessionLocaleResolver" /> 
      <!-- Hibernate configuration --> 
      <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
      <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> 
      <property name="url" value="jdbc:mysql://localhost:3306/river"></property> 
      <property name="username" value="root"></property> 
      <property name="password" value=""></property> 
     </bean> 
      <bean id="sessionFactory" 
      class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
      <property name="dataSource" ref="dataSource"></property> 
      <property name="mappingResources"> 
      <list> 
      <value>\river\amit\com\curd\login.hbm.xml</value> 
      </list> 
      </property> 
       <property name="hibernateProperties"> 
       <value> 
        hibernate.dialect=org.hibernate.dialect.MySQLDialect 
       </value> 
      </property> 
     <!-- <property name="hibernateProperties"> 
       <props> 
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
        <prop key="hibernate.hbm2ddl.auto">update</prop> 
        <prop key="hibernate.show_sql">true</prop> 
        </props> 
      </property> --> 
     </bean> 
      <!-- <bean id="template" class="org.springframework.orm.hibernate3.HibernateTemplate"> 
     <property name="sessionFactory" ref="sessionFactory"></property> 
     </bean> --> 
        <!--  <bean id="transactionManager" 
      class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
      <property name="sessionFactory" ref="sessionFactory" /> 
     </bean> 
      --> 
     <bean id="logindao" class="river.amit.com.dao.LoginDao"> 
     <property name="sessionFactory" ref="sessionFactory"></property> 
     </bean> 
     </beans> 

public class LoginDao { 
    //private HibernateTemplate template; 
    public void LoginDao(){}; 
    private SessionFactory sessionFactory; 
    /* public SessionFactory getSessionFactory() { 
     return sessionFactory; 
    }*/ 
    public void setSessionFactory(SessionFactory sessionFactory) { 
     this.sessionFactory = sessionFactory; 
    } 
    public void savePerson(Login login){ 
     this.sessionFactory.getCurrentSession().save(login); 
    } 
} 



public class LoginService { 
    private LoginDao logindao; 

    public LoginDao getLogindao() { 
     return logindao; 
    } 

    public void setLogindao(LoginDao logindao) { 
     this.logindao = logindao; 
    } 

    public void saveLogin(Login login) { 
     getLogindao().savePerson(login); 
    } 
} 


package river.amit.com; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.web.servlet.ModelAndView; 
import org.springframework.web.servlet.mvc.Controller; 

import river.amit.com.curd.Login; 
import river.amit.com.dao.LoginDao; 
import river.amit.com.service.LoginService; 

public class LoginController implements Controller { 

    @Override 
    public ModelAndView handleRequest(HttpServletRequest request, 
      HttpServletResponse response) throws Exception { 

     String name = request.getParameter("username"); 
     String password = request.getParameter("password"); 
     Login login = new Login(); 
     // TODO Auto-generated method stub 
     if (name != null) { 
      login.setName(name); 
      login.setPassword(password); 
      LoginService service = new LoginService(); 
      service.setLogindao(new LoginDao()); 
      service.saveLogin(login); 
      String message = "HELLO " + name; 
      return new ModelAndView("test", "message", message); 
     } else { 
      return new ModelAndView("errorpage", "message", 
        "Sorry, username or password error"); 
     } 

    } 
} 
+1

Какой код вы получаете? –

+1

Вы не правильно ввели sessionFactory в свой класс LoginDao. С предоставленной информацией, это все, что мы можем вам рассказать. Я предлагаю добавить Spring и Hibernate Config и соответствующий код из 'LoginDao' – cowls

ответ

0

Вам нужно Spring управлять фасоль для вас.

Вы не можете сделать это:

LoginService service = new LoginService(); 
service.setLogindao(new LoginDao()); 

Поскольку эти бобы теперь не будет управляться Spring и поэтому SessionFactory не вводили.

Вы должны получить Spring создать LoginService и Autowire в контроллере

0

Использование @Autowire аннотацию вместо создания экземпляра LoginService по своему усмотрению.

@Autowire 
LoginService service; 
... 
... 
@Override 
    public ModelAndView handleRequest(HttpServletRequest request, 
      HttpServletResponse response) throws Exception { 
    service.saveLogin(login); 
Смежные вопросы