Link to home
Start Free TrialLog in
Avatar of raghugowda
raghugowdaFlag for India

asked on

Unsatisfied dependency expressed through bean property & NoSuchBeanDefinitionException

I'm running JUnit Test Cases which are spring based. When I run a test case, I'm getting below exception:
Error creating bean with name 'com.xyz.TestActionConvertor': Unsatisfied dependency expressed through bean property 'dataSource': Set this property value or disable dependency checking for this bean.

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.xyz.TestActionConvertor': Unsatisfied dependency expressed through bean property 'dataSource': Set this property value or disable dependency checking for this bean.
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.checkDependencies(AbstractAutowireCapableBeanFactory.java:1039)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:858)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:274)
at org.springframework.test.AbstractDependencyInjectionSpringContextTests.injectDependencies(AbstractDependencyInjectionSpringContextTests.java:179)
at org.springframework.test.AbstractDependencyInjectionSpringContextTests.prepareTestInstance(AbstractDependencyInjectionSpringContextTests.java:158)
at org.springframework.test.AbstractSingleSpringContextTests.setUp(AbstractSingleSpringContextTests.java:88)
at org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java:69)



dataSource is defined in spring_context.xml as below:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
 
        <!-- Datasource -->
    <bean id="dataSource" class="be.isabel.pdg.common.db.BasicDatasource">
        <property name="driverClassName"><value>${bank.jdbc.driverclassname}</value></property>
        <property name="url"><value>${bank.jdbc.url}</value></property>
        <property name="password"><value>${bank.jdbc.password}</value></property>
        <property name="username"><value>${bank.jdbc.username}</value>
        </property>
    </bean>
   
        <!-- Hibernate SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
                <property name="configLocation" value="classpath:hibernate.cfg.xml" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.c3p0.max_size">${bank.hibernate.c3p0.max_size}</prop>
                <prop key="hibernate.c3p0.min_size">${bank.hibernate.c3p0.min_size}</prop>
                <prop key="hibernate.c3p0.timeout">${bank.hibernate.c3p0.timeout}</prop>
                <prop key="hibernate.dialect">${bank.hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${bank.hibernate.show_sql}</prop>
            </props>
        </property>
        <property name="lobHandler"><ref bean="lobHandler"/></property>
    </bean>
</beans>
 

Also, I'm getting below exception for some other TestCases:


Exception in constructor: testGetCompanyNumbersForBankUserID (org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'bankUserRoutingDAOBean' is defined at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:360) at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedBeanDefinition(AbstractBeanFactory.java:914) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:241) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:757) 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:494) at junit.framework.TestSuite.createTest(TestSuite.java:131) at junit.framework.TestSuite.addTestMethod(TestSuite.java:114) at junit.framework.TestSuite.<init>(TestSuite.java:75) at org.junit.internal.runners.JUnit38ClassRunner.<init>(JUnit38ClassRunner.java:69) 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:494) at org.junit.internal.requests.ClassRequest.buildRunner(ClassRequest.java:33) at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:28) at junit.framework.JUnit4TestAdapter.<init>(JUnit4TestAdapter.java:28) at junit.framework.JUnit4TestAdapter.<init>(JUnit4TestAdapter.java:21) 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:494) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:387) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:912) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:743) )


Please let me know if further info needed and let me know where its going wrong?
Avatar of mahome
mahome
Flag of Germany image

Can you post your TestClass

You need to extend AbstractTransactionalDataSourceSpringContextTests and define getConfigLocations()
Avatar of raghugowda

ASKER

I have got both as below:
public class TestActionConvertor extends PBPersistTestCase {
 
	public void testToDO() {
		//code
	}
 
	public void testToDTO() {
		//code
	}
 
public class PBPersistTestCase extends PBTestCase {
	public static final String SPRING_MYSQL_CONTEXT_FILES = "common_spring_context.xml;"
					+ "junit_persistance_spring_context.xml;"
						+ "persistance_spring_context.xml";
	
		
	protected String[] getConfigLocations() {
		System.out.println(SPRING_MYSQL_CONTEXT_FILES.split(";"));
		return SPRING_MYSQL_CONTEXT_FILES.split(";");
	}
 
	public PBPersistTestCase() {
		super();
	}
 
	public PBPersistTestCase(String testName) {
		super(testName);
	}
 
	protected String getSpringContextFiles() {
		return SPRING_MYSQL_CONTEXT_FILES;
	}
}
 
PBTestCase extends ABCTestCase{.......}
 
ABCTestCase extends AbstractTransactionalDataSourceSpringContextTests{.......}

Open in new window

If you have no additional config for testing add    
setAutowireMode(AUTOWIRE_BY_NAME) as follows.

 protected String[] getConfigLocations() {
                setAutowireMode(AUTOWIRE_BY_NAME);
                System.out.println(SPRING_MYSQL_CONTEXT_FILES.split(";"));
                return SPRING_MYSQL_CONTEXT_FILES.split(";");
        }

Open in new window

I tried as you said, but still same error: Error creating bean with name ..............
above you mentioned datasource is defined in spring_context.xml, is it also defined in one of those file: "common_spring_context.xml;" + "junit_persistance_spring_context.xml;"                                            + "persistance_spring_context.xml

and with the name "dataSource" (be careful of Case), you could also try AUTOWIRE_BY_TYPE, but if you've named your bean correct that should make no difference
I had renamed junit_persistance_spring_context.xml to spring_context.xml while posting, it contains "dataSource "defined.

 I have checked the case, its correct "dataSource".

In persistance_spring_context.xml & common_spring_context.xml I have defined other beans like:
<bean id="addressedDocRefDAOBean" parent="abc" class="xyz"/>
ASKER CERTIFIED SOLUTION
Avatar of raghugowda
raghugowda
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial