ApplicationContext is always null

I am working on a spring 3 web service application and on this I am trying to load ApplicationContext from my servlett.xml file for use with a simple test case and it does not work.

ApplicationContext is always null.

this is my test code:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "file:war/WEB-INF/FreedomSpring-servlett.xml" }) public class UserControllerTest { private UserController controller; @Inject private ApplicationContext applicationContext; private String jsonUser = "{ \"username\":\"jonneymendoza\",\"emailAddress\":\" jon@google.com \", \"password\":\"12345678\",\"firstName\":\"jono\", \"surname\":\"richy\", \"country\":\"united kingdom\",\"bio\":\"Bio stuff goes here about the user. where he comes from etc etc. all is well. lets go go go\" }"; @Before public void setup() { controller = new UserController(); assertNotNull(applicationContext); } @Test public void testLogin() { fail("Not yet implemented"); } @Test public void testCreateNewAccount() { ResponseEntity<String> response = controller .createNewAccount(new HttpEntity<String>(jsonUser)); assertEquals(HttpStatus.CREATED, response.getStatusCode()); } @Test public void testGetUserProfile() { fail("Not yet implemented"); } } 

Setup error because applicationContext is null. I want to basically load my beans in this case and use them here, but an autwiring object of the UserService class, as shown below in my controller class.

 @Controller public class UserController { @Autowired private UserService userService; 

xml file that defines my beans service:

 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"> <!-- Define services here--> <bean id="userService" class="com.jr.freedom.user.UserService"></bean> </beans> 

servlet below:

 <?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" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <import resource="mvc-config.xml" /> <import resource="service-config.xml" /> <import resource="datasource-config.xml" /> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>database.properties</value> </list> </property> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <context:component-scan base-package="com.jr.freedom.controllers"></context:component-scan> </beans> 

What am I missing?

edit: I get this error on console output

java.lang.NoSuchMethodError: org.junit.runner.notification.RunNotifier.testAborted (Lorg / JUnit / feeder / Description; Ljava / languages ​​/ Throwable;) V, in org.springframework.test.context.junit4.SpringJUnit4ethlass SpringJUnit4ClassRunner.java:146) in org.junit.internal.runners.JUnit4ClassRunner.runMethods (JUnit4ClassRunner.java:61) in org.junit.internal.runners.JUnit4ClassRunner $ 1.run.unjunnunununrunlassunnerunnerunnerunnerun internal.runners.ClassRoadie.runUnprotected (ClassRoadie.java:34) in org.junit.internal.runners.ClassRoadie.runProtected (ClassRoadie.java:44) in org.junit.internal.runners.JUnit4ClassRunner.run (JUnitjClassRunner.run (JUnitjClassRunner.run (JUnitjClassRunner.run (JUnitjClassRunner.run (JUnitjClassRunner.run) 52) in org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:50) in org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38) in org .eclipse. unit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:683) in org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.javarouble90) in org.eclipse.jdt.inrunnerjun RemoteTestRunner.main (RemoteTestRunner.java:197)

Other editing: fixed the above junit error using junit 4.4 instead. Now we will return to the original issue regarding ApplicatyionContext.

This is a trace of the error stack whenever I run my test:

 log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. java.lang.NoClassDefFoundError: javax/servlet/ServletException at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2427) at java.lang.Class.getDeclaredMethods(Class.java:1791) at org.springframework.core.type.StandardAnnotationMetadata.hasAnnotatedMethods(StandardAnnotationMetadata.java:136) at org.springframework.context.annotation.ConfigurationClassUtils.isLiteConfigurationCandidate(ConfigurationClassUtils.java:105) at org.springframework.context.annotation.ConfigurationClassUtils.checkConfigurationClassCandidate(ConfigurationClassUtils.java:86) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:216) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:178) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:617) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:446) 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: java.lang.ClassNotFoundException: javax.servlet.ServletException at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 42 more 
+4
source share
3 answers

It seems that @RunWith(SpringJUnit4ClassRunner.class) annotation @RunWith(SpringJUnit4ClassRunner.class) missing or was it just a mistake while copying and pasting?

0
source

Not quite the answer, but hopefully this will help you troubleshoot (this was for me). Add @RunWith(SpringJUnit4ClassRunner.class) to your class as follows:

 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"file:///c:/project/target/META-INF/spring/applicationContext.xml"}) public class SpringContextTest { ... } 

This will at least give you a log, so it will be easier to see what happens. Either this is the wrong path to the file, or the problem is in determining the context, for example. invalid bean definition.

NB: Despite the absolute path in my example, this was part of the experiment - it should really rely on the location of classpath:

UPDATE: The updated stacktrace command assumes that you do not have the Java Servlet APIs when running the tests (java.lang.NoClassDefFoundError: javax / servlet / ServletException). Remember to include jar servlet-api-2.5.jar (or the like) in your classpath.

+2
source

I also struggled with this problem for 3-4 hours .. but finally, when I added the code below to my test class ....

 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "file:///D:/PRMS_Workspace/PRMS/WebContent/WEB-INF/dispatcher-servlet.xml" }) 

It worked.

+1
source

All Articles