0

The problem happens when I run this part (@RequestMapping("/SearchStaff")) in my controller file. I can display my search form successfullt (the request mapping below SearchStaff).

The problem doesn't seemed to have anything to do with Hibernate. As I've commented the Hibernate stuff but I'm still getting it.

If I comment out this line

message = staffDAO.searchForStaff(search);

in my controller file, it goes through ok. But I don't see anything wrong with searchForStaff function. It's a very simple function that just returns the string "test" and run system.out.println("test").

Can you please help? thanks


But this is the error that I'm getting:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

root cause

java.lang.NullPointerException
    org.flinders.staffdirectory.controllers.SearchController.showSearchResults(SearchController.java:25)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:601)
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:100)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:604)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:565)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

My spring-servlet xml

<?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:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
        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
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <context:component-scan base-package="org.flinders.staffdirectory.controllers" />

    <mvc:annotation-driven />
    <mvc:resources mapping="/resources/**" location="/resources/" />

    <tx:annotation-driven />

    <bean
        id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
        p:location="/WEB-INF/spring.properties" />
    <bean
        id="dataSource"
        class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
        p:driverClassName="${jdbc.driverClassName}"
        p:url="${jdbc.databaseurl}"
        p:username="${jdbc.username}"
        p:password="${jdbc.password}" />
    <bean
        id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
        p:dataSource-ref="dataSource"
        p:configLocation="${hibernate.config}"
        p:packagesToScan="org.flinders.staffdirectory"/>
    <bean
        id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager"
        p:sessionFactory-ref="sessionFactory" />

    <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"
        p:viewClass="org.springframework.web.servlet.view.tiles2.TilesView" />
    <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"
        p:definitions="/WEB-INF/tiles.xml" />

    <bean
        id="staffDAO"
        class="org.flinders.staffdirectory.dao.StaffDAO"
        p:sessionFactory-ref="sessionFactory" />
    <!-- <bean
        id="staffService"
        class="org.flinders.staffdirectory.services.StaffServiceImpl"
        p:staffDAO-ref="staffDAO" />-->
</beans>

This is my controller file

package org.flinders.staffdirectory.controllers;

import java.util.List;

//import org.flinders.staffdirectory.models.database.SearchResult;
import org.flinders.staffdirectory.models.misc.Search;
import org.flinders.staffdirectory.dao.StaffDAO;

//import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class SearchController {
    //@Autowired
    private StaffDAO staffDAO;
    private String message;

    @RequestMapping("/SearchStaff")
    public ModelAndView showSearchResults(@ModelAttribute Search search) {

        //List<SearchResult> searchResults =
        message = staffDAO.searchForStaff(search);

        //System.out.println(search.getSurname());
        return new ModelAndView("search/SearchForm", "Search", new Search());
        //return new ModelAndView("search/SearchResults", "searchResults", searchResults);
    }

    @RequestMapping("/SearchForm")
    public ModelAndView showSearchForm() {
        return new ModelAndView("search/SearchForm", "search", new Search());
    }
}

my dao class

package org.flinders.staffdirectory.dao;

import java.util.List;

import org.hibernate.SessionFactory;

//import org.springframework.beans.factory.annotation.Autowired;

import org.flinders.staffdirectory.models.database.SearchResult;
import org.flinders.staffdirectory.models.misc.Search;

public class StaffDAO {
    //@Autowired
    private SessionFactory sessionFactory;

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

    public String searchForStaff(Search search) {
        /*String SQL = "select distinct telsumm_id as id, telsumm_parent_id as parentId, telsumm_name_title as title, (case when substr(telsumm_surname, length(telsumm_surname) - 1, 1) = ',' then substr(telsumm_surname, 1, length(telsumm_surname) - 1) else telsumm_surname end) as surname, telsumm_preferred_name as firstname, nvl(telsumm_tele_number, '-') as telephoneNumber, nvl(telsumm_role, '-') as role, telsumm_display_department as department, lower(telsumm_entity_type) as entityType from teldirt.teld_summary where (telsumm_search_surname is not null) and not (nvl(telsumm_tele_directory,'xxx') IN ('N','S','D')) and not (telsumm_tele_number IS NULL AND telsumm_alias IS NULL) and (telsumm_alias_list = 'Y' OR (telsumm_tele_directory IN ('A','B'))) and ((nvl(telsumm_system_id_end,sysdate+1) > SYSDATE and telsumm_entity_type = 'P') or (telsumm_entity_type = 'N')) and (telsumm_search_department NOT like 'SPONSOR%')";

        if (search.getSurname().length() > 0) {
            SQL += " and (telsumm_search_surname like '" + search.getSurname().toUpperCase() + "%')";
        }
        if (search.getSurnameLike().length() > 0) {
            SQL += " and (telsumm_search_soundex like soundex(('%" + search.getSurnameLike().toUpperCase() + "%'))";
        }
        if (search.getFirstname().length() > 0) {
            SQL += " and (telsumm_search_preferred_name like '" + search.getFirstname().toUpperCase() + "%' or telsumm_search_first_name like '" + search.getFirstname() + "%')";
        }
        if (search.getTelephoneNumber().length() > 0) {
            SQL += " and (telsumm_tele_number like '" + search.getTelephoneNumber() + "%')";
        }
        if (search.getDepartment().length() > 0) {
            SQL += " and (telsumm_search_department like '" + search.getDepartment().toUpperCase() + "%')";
        }
        if (search.getRole().length() > 0) {
            SQL += " and (telsumm_search_role like '" + search.getRole().toUpperCase() + "%')";
        }
        SQL += " order by surname, firstname";

        List<Object[]> list = (List<Object[]>) sessionFactory.getCurrentSession().createQuery(SQL).list();

        for(int j=0;j<list.size();j++){
            Object [] obj= (Object[])list.get(j);
            for(int i=0;i<obj.length;i++)
                System.out.println(obj[i]);
        }*/
                System.out.println("test");
             return "test";
    }
}

my pom.xml

<project
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>org.flinders.staffdirectory</groupId>

    <artifactId>directory-maven</artifactId>

    <packaging>war</packaging>

    <version>0.0.1-SNAPSHOT</version>

    <name>directory-maven Maven Webapp</name>

    <url>http://maven.apache.org</url>

    <properties>
        <org.springframework.version>3.1.3.RELEASE</org.springframework.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.1.8.Final</version>
        </dependency>

        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.5.8</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-jsp</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>directory-maven</finalName>
    </build>
</project>
Francisco Alvarado
  • 2,815
  • 2
  • 26
  • 51
mrjayviper
  • 2,258
  • 11
  • 46
  • 82
  • I see that you have commented the autowiring in your controller for the field of staffDao. And you haven't injected it by xml either. That will throw a NullPointerException – ElderMael Dec 06 '12 at 05:13
  • I commented Autowired as I was trying to see what could be the problem. Uncommented now (and the needed import) but still getting an error. see error screenshot (http://awesomescreenshot.com/035os49b9) – mrjayviper Dec 06 '12 at 05:21
  • changed my bean declaration to staffDAO to and still the same error. – mrjayviper Dec 06 '12 at 05:25

1 Answers1

1

StaffDAO is null . Any reason why you commented out its autowiring.

Also I see private SessionFactory sessionFactory; Autowired is also commented. Please try removing those comments.

//@Autowired

Subin Sebastian
  • 10,870
  • 3
  • 37
  • 42
  • I commented Autowired as I was trying to see what could be the problem. Uncommented now (and the needed import) but still getting an error. see error screenshot (http://awesomescreenshot.com/035os49b9) – mrjayviper Dec 06 '12 at 05:20
  • I don't really understand when you said "staddDAO is null". thanks for the patience. – mrjayviper Dec 06 '12 at 05:28
  • Hi what I meant is StaffDao object in your SearchController.java has to be initialized some how. Either you have to @autowired it or inject it via bean defenition. – Subin Sebastian Dec 06 '12 at 06:25
  • please remove commenting of @AutoWired in both your Dao and controller and let me know the output. – Subin Sebastian Dec 06 '12 at 06:26