In order to support the use of the @SpringBean annotation, I've made some
adjustments to my Wicket application that work beautifully right out of the
gate. The documentation and assistance from this list helped get me up to
speed and working quickly. HOWEVER, my JUnit tests are now failing when
attempting to create my Wicket application bean, as follows:
Error creating bean with name 'wicketApplication' defined in class path
resource [applicationContext.xml]: Initialization of bean failed; nested
exception is java.lang.NoClassDefFoundError: javax/servlet/ServletContext
Since these tests aren't Wicket specific, I can comment out the bean definition
in applicationContext.xml and the tests run flawlessly, but that's certainly
not an acceptable fix. The error indicates that I'm missing some dependencies
(I'm guessing) but as a Maven project with Eclipse properly configured, I would
think I would bomb when running the app normally and not just when running
tests.
Anyone have any ideas on what's going wrong here?
To sum up, here are the modifications I made to make use of @SpringBean
Included the following in web.xml:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>wicket.wicketFilter</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationFactoryClassName</param-name>
<param-value>org.apache.wicket.spring.SpringWebApplicationFactory</param-value>
</init-param>
</filter>
Referenced my primary WicketApplication class as a bean in
applicationContext.xml:
<bean id="wicketApplication" class="com.oa.frontoffice.FrontOfficeApp" />
And in my WicketApplication, I included the following in my init() method:
getComponentInstantiationListeners().add(new SpringComponentInjector(this));
The results were great and I've been trucking along... but then I ran my unit
tests and found that exception. Does anyone have any advice?
A more complete stack trace follows if it's helpful:
org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'wicketApplication' defined in class path resource
[applicationContext.xml]: Initialization of bean failed; nested exception is
java.lang.NoClassDefFoundError: javax/servlet/ServletContext
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607)
at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472)
at
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at
com.oa.frontoffice.service.BeanService.<init>(BeanService.java:9)
at
com.oa.frontoffice.service.BeanService.getInstance(BeanService.java:17)
at
com.oa.frontoffice.gateway.HotListGateway.<init>(HotListGateway.java:22)
at
com.oa.frontoffice.gateway.TestHotListGatewayIntegration.setUp(TestHotListGatewayIntegration.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
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)
Thanks,
Mike