2014-10-03 4 views
1

Я объясню ситуацию. У меня есть веб-приложение, java + spring + hibernate. На самом деле, я хочу, чтобы интегрировать DWR с весной, так что я сделал все настройки, и я думаю, что я сделал хорошо работаю, так я получаю эти окна:Java-Spring, странный NullPointerException

enter image description here

Теперь мы можем сосредоточиться на findUsername(String username) methodo внутри код DWR:

@Autowired 
UserBo userBo; 

public boolean findUsername(String username) { 

    System.out.println("I'm in the DWR"); 

    try { 

     User user = userBo.findByUsername(username); 

     if(user != null) { 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 
    catch (Exception e) { 
     System.out.println(e.toString()); 
     return false; 
    } 
} 

И это код userBo.findByUsername(String username) methodo:

public User findByUsername(String username) { 
    System.out.println("I'm in the BO"); 
    return userDao.findByUsername(username); 
} 

И DAO Код:

@Transactional 
public User findByUsername(String username) { 
    session = sessionFactory.openSession(); 

    System.out.println("I'm in the DAO"); 

    String hql = "FROM User Tab WHERE Tab.username= :username"; 

    Query query = session.createQuery(hql); 

    query.setParameter("username", username); 

    @SuppressWarnings("unchecked") 
    List<User> userFound = (List<User>) query.list(); 
    if (userFound.size() > 0) { 

     session.close(); 
     return userFound.get(0); 
    } 
    return null; 
} 

Но когда код достигают userBo.findByUsername(username); вызова метода я получаю NullPointerException.

Я уверен, что бо + день работает хорошо, потому что я использовал его в какой-либо другой части приложения.

Я не понимаю проблему. Может кто-нибудь мне помочь?

EDIT: StackTrace

lcc.dwr.CCServiceDWR.findUsername(CCServiceDWR.java:26) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
java.lang.reflect.Method.invoke(Unknown Source) 
org.directwebremoting.impl.CreatorModule$1.doFilter(CreatorModule.java:229) 
org.directwebremoting.impl.CreatorModule.executeMethod(CreatorModule.java:241) 
org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:379) 
org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:332) 
org.directwebremoting.dwrp.BaseCallHandler.handle(BaseCallHandler.java:104) 
org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:120) 
org.directwebremoting.spring.DwrController.handleRequestInternal(DwrController.java:234) 
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) 
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915) 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:822) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315) 
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
java.lang.Thread.run(Unknown Source) 
+2

Вы можете добавить StackTrace? – Xstian

+0

@ Xstian, так как я нахожусь в DWR, консоль не показывает мне стек: S – Alist3r

+0

имя пользователя null? – madhairsilence

ответ

0

Нашел проблему: Я пропускаю эту строку в DWR-servlet.xml

<context:component-scan base-package="lcc.*" /> 
2

Если контекст пружина полностью инициализирован пружинные гарантирует, что все @autowired поля являются не-нулевые бобы.

Однако, если вы вызываете какой-либо метод bean до того, как исходный контекст полностью инициализирован, поле @autowired может быть нулевым.

Проверить, если вы звоните findUsername(String username) до того контекста готов, и если да - это может быть причина ...

Если вы хотите сделать некоторые вызов и быть уверены, что контекст уже готово попробовать такую ​​закономерность:

@Component 
public class SpringContextMonitor implements ApplicationListener<ApplicationEvent> { 

    @Autowired 
    private SomeDao dao; 

    ... 

    @Override 
    public void onApplicationEvent(ApplicationEvent event) { 
     if (event instanceof ContextRefreshedEvent) { 
      onStart((ContextRefreshedEvent) event); 
     } 
    } 

    private void onStart(ContextRefreshedEvent event) { 

    // do your initialization here 
    dao.getSomething(); 
    dao2.getSomething(); 
    ... 

    } 

    ... 
} 

В этом коде метод onStart - это вызов сразу после того, как контекст станет готовым.

+0

Итак ... что я должен делать? (я добавил stacktrace) – Alist3r

+0

Ваш стек показывает, что вызов 'findUsername' - это когда ваш весенний контекст готов - так что это не проблема, которую я написал.Другая идея заключается в том, что ваш компонент, который имеет userBo, не поддерживается по пути сканирования весны, поэтому весна не вводит userBo. Вы должны включить весенние журналы (уровень отладки) и посмотреть, пытается ли Spring вставлять компонент userBo. –

+0

Во время findUsername вызывать userBo - Null. Вот почему я получаю исключение NullPointerException. Но в какой-то другой части приложения я уже пользователь @autowired для UserBo без проблем – Alist3r