Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Could not instantiate bean : Constructor threw exception; nested exception is java.lang.NullPointerException

package baseDao;

public interface BaseDao {

    public void create(Object obj);
    public void delete(Object obj);
    public void update(Object obj);
    public void get(Object obj);
}

package baseDao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;


public abstract  class BaseDaoImpl implements BaseDao {

    @Autowired
    private  SessionFactory usermanagementSessionFactory;
    private  Session session = usermanagementSessionFactory.getCurrentSession();

    /*-----------------To save an object--------------*/

    public void create(Object obj){
        session.save(obj);
    }

    /*-----------------To delete an object--------------*/


    public void delete(Object obj){
        session.delete(obj);
    }

    /*-----------------To update an object--------------*/

    public void update(Object obj){
        session.update(obj);
    }

    /*-----------------To find/Get an object--------------*/

    public void get(Object obj){

    }



    protected SessionFactory getUsermanagementSessionFactory() {
        return usermanagementSessionFactory;
    }


    protected void setUsermanagementSessionFactory(
            SessionFactory usermanagementSessionFactory) {
        this.usermanagementSessionFactory = usermanagementSessionFactory;
    }

}




<?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:util="http://www.springframework.org/schema/util"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/jee 
        http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">

    <util:properties id="usermanagementHibernateProperties" location="classpath:usermanagement-hibernate.properties" />

    <bean id="usermanagementSessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="usermanagementDataSource" />
        <property name="configLocation" value="classpath:hibernate.cfg.usermanagement.xml" />
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
        <property name="hibernateProperties" ref="usermanagementHibernateProperties" />
    </bean>

    <jee:jndi-lookup id="usermanagementDataSource" jndi-name="java:usermanagementDS" />

    <bean id="city" class="com.ecom.data.entities.user.City"/>
    <bean id="state" class="com.ecom.data.entities.user.State"/>
    <bean id="country" class="com.ecom.data.entities.user.Country"/>
    <bean id="pincodes" class="com.ecom.data.entities.user.Pincodes"/>
    <bean id="notification" class="com.ecom.data.entities.notification.Notifications"/>
    <bean id="notification_types" class="com.ecom.data.entities.notification.Notification_Types"/>
    <bean id="transactions" class="com.ecom.data.entities.transaction.Transactions"/>
    <bean id="address" class="com.ecom.data.entities.user.Address"/>
    <bean id="user_master" class="com.ecom.data.entities.user.User_Master"/>
    <bean id="notification_channels" class="com.ecom.data.entities.notification.Notification_Channels"/>
    <bean id="notification_time" class="com.ecom.data.entities.notification.Notification_Time"/>
    <bean id="prefilled_response" class="com.ecom.data.entities.product.Prefilled_Response"/>
    <bean id="payment_options" class="com.ecom.data.entities.transaction.Payment_Options"/>
    <bean id="catagory" class="com.ecom.data.entities.product.Catagory"/>
    <bean id="vendor" class="com.ecom.data.entities.product.Vendor"/>
    <bean id="requester" class="com.ecom.data.entities.product.Requester"/>
    <bean id="requirement_type" class="com.ecom.data.entities.product.Requirement_type"/>
    <bean id="discount_offer_type" class="com.ecom.data.entities.product.Discount_Offer_Type"/>
    <bean id="discount_offers" class="com.ecom.data.entities.product.Discount_Offers"/>
    <bean id="requirements" class="com.ecom.data.entities.product.Requirements"/>
    <bean id="product_catalog" class="com.ecom.data.entities.product.Product_Catalog"/>
    <bean id="product_catalog_vendor" class="com.ecom.data.entities.product.Product_Catalog_Vendor"/>
    <bean id="product_vendor_payment_option_location" class="com.ecom.data.entities.product.PRODUCT_VENDOR_PAYMENT_OPTION_LOCATION"/>

    <bean id="baseDaoImpl" abstract="true"  class="baseDao.BaseDaoImpl"> </bean>
    <bean id="pincodeDao" parent="baseDaoImpl" class="com.ecom.data.access.user.PincodeDao"> </bean>


</beans>





package com.ecom.data.access.user;

import junit.framework.Assert;

import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.ecom.data.entities.user.Pincodes;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/applicationContext-usermanagement-dao.xml",
        "/applicationContext-usermanagement-dao-test.xml" })
public class PiccodeTest extends AbstractTransactionalJUnit4SpringContextTests {


    @BeforeClass
    public static void setup(){}


    @Test
    public void pincodeTest(){

        PincodeDao pinDao = new PincodeDao();   // object of dao class to call the create method
        pinDao.save();

    }

}
______________________________________________________________________
when i run this code with junit with maven it gives the error
-------------------->

SEVERE: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@1f2edd2] to prepare test instance [com.ecom.data.access.user.PiccodeTest@1dbb27d]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pincodeDao' defined in class path resource [applicationContext-usermanagement-dao.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.ecom.data.access.user.PincodeDao]: Constructor threw exception; nested exception is java.lang.NullPointerException
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1011)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:957)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:96)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:44)
    at org.springframework.test.context.TestContext.buildApplicationContext(TestContext.java:198)
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:233)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:126)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:85)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:231)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:95)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:139)
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.ecom.data.access.user.PincodeDao]: Constructor threw exception; nested exception is java.lang.NullPointerException
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1004)
    ... 30 more
Caused by: java.lang.NullPointerException
    at baseDao.BaseDaoImpl.<init>(BaseDaoImpl.java:11)
    at com.ecom.data.access.user.PincodeDao.<init>(PincodeDao.java:7)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
    ... 32 more

in this code i am trying tu run my entity i have a pincode entity with getter setter and all things now i just want to save the data with this code in my test scope

i am using hibernate 4 spring 3 and maven 3

like image 426
Naveen Kumar Avatar asked May 15 '13 09:05

Naveen Kumar


3 Answers

You are trying to initialize session object, when usernameSessionFactory object is not initialized yet.

In a class, all Spring @Autowired objects are initialized just after the construction of the instance of such class is done.

private  Session session = usermanagementSessionFactory.getCurrentSession();

But if an instance decleared in a way like the above code, will be initialized earlier than construction, in a way that they can even be used as parameters of construction.

@Autowired
private  SessionFactory usermanagementSessionFactory;
private  Session session;

@PostConstruct
public void init() {
    session = usermanagementSessionFactory.getCurrentSession();
}

Above code, will initialize session object after the construction, which means usermanagementSessionFactory is ready and not null.

Hopefull it helps..

like image 145
Cenk ŞİMŞEK Avatar answered Nov 04 '22 00:11

Cenk ŞİMŞEK


Move the session initialization to below method

@PostConstruct
public void init(){
      session = usermanagementSessionFactory.getCurrentSession();
}
like image 38
Karthik Prasad Avatar answered Nov 04 '22 01:11

Karthik Prasad


The problem is here:

@Autowired
private  SessionFactory usermanagementSessionFactory;
private  Session session = usermanagementSessionFactory.getCurrentSession();

The sessionFactory needs to be autowired, but this only happens after construction. Construction involves the second line being executed - which uses the unset factory. Hence you get a null pointer exception.

Even though your class doesnt have a constructor, construction of an instance can still thow an exception as a result of field initialisation, as in this case.

like image 7
PaulJWilliams Avatar answered Nov 03 '22 23:11

PaulJWilliams