[rspec-users] [Cucumber] JUnit, Spring and autowiring

aslak hellesoy aslak.hellesoy at gmail.com
Wed May 20 04:58:24 EDT 2009


>
> We are having trouble with JUnit-tests that are doing dependency injection in
> the setup of database connections. The stacktrace identifies autowiring of
> sessionFactory as the problem. During bean creation of sessionFactory we get
> a NoSuchMethodError; probably because of trouble when initializing the cglib
> class net.sf.cglib.proxy.Enhancer. I am using cucumber-maven-plugin on a

The cucumber-maven plugin is intended to run Cucumber features, not
JUnit tests, so I'm not sure I understand what you're trying to do.
There is nothing JRuby or Cucumber specific in your stack trace.

Could you please follow the guidelines for contributing and commit a
fork to the cucumber_java project that shows how to reproduce the
problem?
http://wiki.github.com/aslakhellesoy/cucumber/contributing

For new posts, please use the new ML:
http://www.nabble.com/-Cucumber--ANN%3A-New-Google-Group-for-Cucumber-td23602831.html

Aslak

> pretty standard Spring project with Spring MVC, Hibernate and Java 1.6,
> deploying to Tomcat and Jetty.
>
> -- Test Class (autowiring daoImpl):
> [code=java]
> @ContextConfiguration(locations = {"/test-config-db.xml"})
> @RunWith(SpringJUnit4ClassRunner.class)
> public class SdbCollectorDbTest {
>
>    @Autowired
>    private EventFactory eventFactory;
>
>    @Autowired
>    @Qualifier("sdbDaoImpl") // tried using autowiring by name, it made no
> difference
>    protected SdbDao sdbDao;
> [/code]
>
> -- DaoImpl (autowiring sessionFactory):
> [code=java]
> @Repository
> @Qualifier("sdbDaoImpl") // tried using autowiring by name, it made no
> difference
> @Transactional(readOnly = true)
> public class SdbDaoImpl implements SdbDao {
>
>    @Autowired
>    private SessionFactory sessionFactory;
> [/code]
>
> -- Bean-config for sessionFactory and transactionManager:
> [code=xml]
>    <context:component-scan base-package="...cut..."/>
>    <tx:annotation-driven/>
>    <bean id="transactionManager"
> class="org.springframework.orm.hibernate3.HibernateTransactionManager">
>        <property name="sessionFactory" ref="sessionFactory"/>
>    </bean>
>    <bean id="sessionFactory"
> class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
>        <property name="dataSource" ref="dataSourceNMHDB2P"/>
>        <property name="mappingResources">
>            <list>... cut...</list>
>        </property>
>        <property name="hibernateProperties">
>            ...cut...
>        </property>
>
>        <property name="lobHandler" ref="defaultLobHandler"/>
>    </bean>
> [/code]
>
> -- Stacktrace:
> java.lang.IllegalStateException: Failed to load ApplicationContext
>               at
> org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:203)
>               at
> org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
>               at
> org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
>               at
> org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:255)
>               at
> org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:93)
>               at
> org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:130)
>               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
> com.intellij.rt.junit4.Junit4ClassSuite.run(Junit4ClassSuite.java:99)
>               at
> com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:40)
>               at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
>               at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>               at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>               at
> com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
> Caused by: org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'sdbDaoImpl': Autowiring of fields failed; nested
> exception is org.springframework.beans.factory.BeanCreationException: Could
> not autowire field: private org.hibernate.SessionFactory
> <cut>.SdbDaoImpl.sessionFactory; nested exception is
> org.springframework.beans.factory.BeanCreationException: Error creating bean
> with name 'sessionFactory' defined in class path resource [datasource.xml]:
> Invocation of init method failed; nested exception is
> java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
>               at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:243)
>               at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:959)
>               at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
>               at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
>               at java.security.AccessController.doPrivileged(Native Method)
>               at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
>               at
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
>               at
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
>               at
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
>               at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
>               at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
>               at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
>               at
> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
>               at
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
>               at
> org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:84)
>               at
> org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:42)
>               at
> org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:173)
>               at
> org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:199)
>               ... 22 more
> Caused by: org.springframework.beans.factory.BeanCreationException: Could
> not autowire field: private org.hibernate.SessionFactory
> <cut>.adiseksport.dao.SdbDaoImpl.sessionFactory; nested exception is
> org.springframework.beans.factory.BeanCreationException: Error creating bean
> with name 'sessionFactory' defined in class path resource [datasource.xml]:
> Invocation of init method failed; nested exception is
> java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
>               at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:435)
>               at
> org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:105)
>               at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:240)
>               ... 39 more
> Caused by: org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'sessionFactory' defined in class path resource
> [datasource.xml]: Invocation of init method failed; nested exception is
> java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
>               at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1337)
>               at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
>               at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
>               at java.security.AccessController.doPrivileged(Native Method)
>               at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
>               at
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
>               at
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
>               at
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
>               at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
>               at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
>               at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:671)
>               at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:610)
>               at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:412)
>               ... 41 more
> Caused by: java.lang.NoSuchMethodError:
> org.objectweb.asm.ClassWriter.<init>(Z)V
>               at
> net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.java:47)
>               at
> net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.java:30)
>               at
> net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:24)
>               at
> net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
>               at
> net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
>               at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:117)
>               at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
>               at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
>               at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
>               at
> org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:117)
>               at
> org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.java:43)
>               at
> org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:162)
>               at
> org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:135)
>               at
> org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:55)
>               at
> org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:56)
>               at
> org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:302)
>               at
> org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:434)
>               at
> org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:109)
>               at
> org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
>               at
> org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:226)
>               at
> org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1300)
>               at
> org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:814)
>               at
> org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:732)
>               at
> org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
>               at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1368)
>               at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334)
>               ... 53 more
>
>
> --
> View this message in context: http://www.nabble.com/-Cucumber--JUnit%2C-Spring-and-autowiring-tp23595316p23595316.html
> Sent from the rspec-users mailing list archive at Nabble.com.
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>


More information about the rspec-users mailing list