0

I am getting a null pointer exception when I try to query a result from DB. Here's the error:

java.lang.NullPointerException
    at main.java.utils.WebAppInfo.getAppName(WebAppInfo.java:14)
    at main.java.views.adminView.IndexView.loadPageInfo(IndexView.java:21)
    at main.java.controller.MainAction.welcome(MainAction.java:24)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:746)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:687)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    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:915)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

Here's the function where that error is coming from.

@Resource(name="applicationInfoService")
    private static ApplicationInfoService applicationInfoService;

    public static ApplicationInfo getAppName() {
        ApplicationInfo applicationInfo = applicationInfoService.getAppNameResult(); 
        return applicationInfo;
    }

If i initiate application info service ( = new ApplicationInfoService()) I get a null pointer error to my Service class where query is made

@Service("applicationInfoService")
@Transactional
public class ApplicationInfoService {
    private EntityManager entityManager;

    @PersistenceContext
    public void setEntityManager(EntityManager entityManager){ 
        this.entityManager = entityManager; 
    }

    public ApplicationInfo getAppNameResult() {
        String sql = "FROM ApplicationInfo";
        Query query = entityManager.createQuery(sql);
        return (ApplicationInfo) query.getSingleResult();
    }
}

Error goes to createQuery line and if i print out EntityManager it returns "null". Why wont my Entitymanager get initialized. I am using allmost the same build up in my login system and it works over there. When i use multiple EntityManager classes in a project, do i need to configure them somehow? I am not sure how to fix this problem, since im new to spring, hibernate, JPA etc.

Alex
  • 21,273
  • 10
  • 61
  • 73
Kapaacius
  • 655
  • 4
  • 10
  • 22

2 Answers2

2

Spring does not allow to inject static fields, thats why you are getting NullPointerException.

I can suggest you an work-arrond. Add the bellow block of code in your WebAppInfo class:

@Resource(name="applicationInfoService")
public void setService(ApplicationInfoService service) {
    WebAppInfo.applicationInfoService = service;
}

Don't forget remove @Resouce annotation from applicationInfoService.

Edit:

The above suggestion was only to fix the NullPointerException in your WebAppInfo class for the reason of not being initialized an static field!

But there are can be number of causes for your EntityManager being null. As you are saying it worked for you in other system. I suggest you to

  • recheck the path of your persistence.xml, after the deployment.
  • See the answer here.

And if these does not help you, please provide sufficient information of the exception trace and related code.

Community
  • 1
  • 1
Sazzadur Rahaman
  • 6,938
  • 1
  • 30
  • 52
  • That did not help. I get null pointer even if I remove all static modifiers around that entity manager – Kapaacius Jun 12 '13 at 13:58
  • @user1272486, I just edited my answer see this, if these does not help, please post your Exception trace with related code and configuration. – Sazzadur Rahaman Jun 12 '13 at 14:35
  • I read that topic but his solution didn't help mine. check here : https://github.com/Kapaacius/Fishfood Probably easier if you can see xml's also – Kapaacius Jun 12 '13 at 18:55
0

What is the point of injecting a value into a static field? It can only have one value per class loader and it sort of defeats the purpose of the IoC environment. Even though sazzadur's answer will get you past the NullPointerException its not going to save you from strange bugs if other classes do same thing.

Instead of mixing paradigms, I would consider dispatching with the WebAppInfo class, converting ApplicationInfoService to a singleton and injecting it wherever appropriate.

nsfyn55
  • 14,875
  • 8
  • 50
  • 77
  • I changed my service to Singleton, but I am still getting null pointer. Now it keeps popping up to this line in Service class "Query query = entityManager.createQuery(sql);" – Kapaacius Jun 12 '13 at 15:24