我正在尝试运行 TestNG+Spring+JPA+Hibernate 'Hello World' 测试。执行导致 NullPointerException,tile 配置器 bean 失败。
例外:
2011-08-20 18:12:18,547 [main] INFO org.springframework.web.servlet.view.tiles2.TilesConfigurer - TilesConfigurer:添加定义 [/WEB-INF/tiles/tiles.xml] annotation.internalScheduledAnnotationProcessor,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,homeController,userSessionController,NHUserDAOImpl,org.springframework.context。 annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,nethawalaProperties,placeholderConfig]; 工厂层次结构的根 AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,homeController,userSessionController,NHUserDAOImpl,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation。 internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,nethawalaProperties,placeholderConfig]; 工厂层次结构的根 AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,homeController,userSessionController,NHUserDAOImpl,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation。 internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,nethawalaProperties,placeholderConfig]; 工厂层次结构的根 userSessionController,NHUserDAOImpl,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context。 annotation.internalPersistenceAnnotationProcessor,nethawalaProperties,placeholderConfig]; 工厂层次结构的根 userSessionController,NHUserDAOImpl,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context。 annotation.internalPersistenceAnnotationProcessor,nethawalaProperties,placeholderConfig]; 工厂层次结构的根 internalPersistenceAnnotationProcessor,nethawalaProperties,placeholderConfig]; 工厂层次结构的根 internalPersistenceAnnotationProcessor,nethawalaProperties,placeholderConfig]; 工厂层次结构的根 2011-08-20 18:12:18,563 [main] 错误 org.springframework.test.context.TestContextManager - 在允许 TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@fdfc58] 准备测试实例 [com .tigermindz.test.FacultyDaoTest@1afae45] java.lang.IllegalStateException:无法加载 ApplicationContext 在 org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:308) 在 org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109) 在 org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75) 在 org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321) 在 org.springframework.test.context.testng.AbstractTestNGSpringContextTests.springTestContextPrepareTestInstance(AbstractTestNGSpringContextTests.java:133) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:76) 在 org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:525) 在 org.testng.internal.Invoker.invokeConfigurations(Invoker.java:202) 在 org.testng.internal.Invoker.invokeConfigurations(Invoker.java:130) 在 org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:173) 在 org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105) 在 org.testng.TestRunner.runWorkers(TestRunner.java:1147) 在 org.testng.TestRunner.privateRun(TestRunner.java:749) 在 org.testng.TestRunner.run(TestRunner.java:600) 在 org.testng.SuiteRunner.runTest(SuiteRunner.java:317) 在 org.testng.SuiteRunner.runSequentially(SuiteRunner.java:312) 在 org.testng.SuiteRunner.privateRun(SuiteRunner.java:274) 在 org.testng.SuiteRunner.run(SuiteRunner.java:223) 在 org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 在 org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 在 org.testng.TestNG.runSuitesSequentially(TestNG.java:1039) 在 org.testng.TestNG.runSuitesLocally(TestNG.java:964) 在 org.testng.TestNG.run(TestNG.java:900) 在 org.testng.TestNG.privateMain(TestNG.java:1182) 在 org.testng.TestNG.main(TestNG.java:1146) 原因:org.springframework.beans.factory.BeanCreationException:在类路径资源[nethawala-servlet.xml]中定义名称为'tilesConfigurer'的bean创建错误:调用init方法失败;嵌套异常是 java.lang.NullPointerException 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 在 org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:84) 在 org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1) 在 org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:280) 在 org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:304) ... 28 更多 引起:java.lang.NullPointerException 在 org.springframework.web.servlet.view.tiles2.SpringTilesApplicationContextFactory$SpringWildcardServletTilesApplicationContext.(SpringTilesApplicationContextFactory.java:72) 在 org.springframework.web.servlet.view.tiles2.SpringTilesApplicationContextFactory.createApplicationContext(SpringTilesApplicationContextFactory.java:55) 在 org.springframework.web.servlet.view.tiles2.TilesConfigurer.afterPropertiesSet(TilesConfigurer.java:335) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) ... 41 更多
我的applicationContext.xml
,只显示tiles config bean def:
<bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles/tiles.xml</value>
</list>
</property>
</bean>
做了很多谷歌搜索,唯一发现的是,人们提到 cglib 和/或 asm jar 与 spring 和 hibernate 依赖项冲突。我认为这在这里不适用,但是我的 lib 文件夹有以下 jars,抱歉不按顺序排列:
./tiles-template-2.2.2.jar ./spring-security-acl-3.0.5.RELEASE.jar ./org.springframework.context-3.0.5.RELEASE.jar ./hibernate-jpa-2.0-api-1.0.0.Final.jar ./tiles-api-2.2.2.jar ./validation-api-1.0.0.GA.jar ./org.springframework.web.servlet-3.0.5.RELEASE.jar ./hsqldb.jar ./spring-security-taglibs-3.0.5.RELEASE.jar ./commons-pool-1.5.6.jar ./aspectjrt-1.6.8.jar ./commons-beanutils-1.8.3.jar ./org.springframework.aop-3.0.5.RELEASE.jar ./spring-security-core-3.0.5.RELEASE.jar ./commons-collections-3.1.jar ./org.springframework.web-3.0.5.RELEASE.jar ./jstl-1.2.jar ./org.springframework.expression-3.0.5.RELEASE.jar ./dom4j-1.6.1.jar ./org.springframework.orm-3.0.5.RELEASE.jar ./log4j-1.2.16.jar ./org.springframework.beans-3.0.5.RELEASE.jar ./tiles-servlet-2.2.2.jar ./poi-3.7-20101029.jar ./spring-security-aspects-3.0.5.RELEASE.jar ./slf4j-api-1.6.1.jar ./aopalliance-1.0.jar ./slf4j-simple-1.6.1.jar ./hibernate3.jar ./slf4j-ext-1.6.1.jar ./spring-security-web-3.0.5.RELEASE.jar ./jta-1.1.jar ./asm-3.3.1.jar ./org.springframework.test-3.0.5.RELEASE.jar ./spring-security-config-3.0.5.RELEASE.jar ./org.springframework.core-3.0.5.RELEASE.jar ./org.springframework.asm-3.0.5.RELEASE.jar ./tiles-jsp-2.2.2.jar ./testng-6.0.1.jar ./commons-digester-2.1.jar ./commons-logging-1.1.1.jar ./org.springframework.transaction-3.0.5.RELEASE.jar ./javax.inject.jar ./commons-dbcp-1.4.jar ./slf4j-log4j12-1.6.1.jar ./hibernate-validator-4.1.0.Final.jar ./javassist-3.12.0.GA.jar ./tiles-core-2.2.2.jar ./aspectjweaver-1.6.8.jar ./org.springframework.jdbc-3.0.5.RELEASE.jar ./jackson-all-1.7.5.jar ./jstl-api-1.2.jar ./antlr-2.7.6.jar ./cglib-2.2.jar
测试类如下:
@ContextConfiguration(locations = { "classpath:test-servlet.xml" })
public class FacultyDaoTest extends AbstractTransactionalTestNGSpringContextTests {
private final XLogger logger = XLoggerFactory.getXLogger(FacultyDaoTest.class);
@Inject
FacultyDAO facultyDao;
@BeforeClass
public void setUp() {
logger.entry();
System.out.println("Inside setup");
}
@Test(groups = { "fast" })
@Rollback(value = false)
public void createFaculty() {
Faculty f = new Faculty();
f.setFirstName("John");
f.setLastName("Frost");
f.setCpsoNumber("23198");
f = facultyDao.makePersistent(f);
assert(f.getId() > 0);
}
@Test(groups = { "fast" })
public void aFastTest() {
logger.entry();
logger.info("Inside a Fast test");
}
@Test(groups = { "slow" })
public void aSlowTest() {
logger.entry();
logger.info("Inside a Slow test");
}
}
任何指针将不胜感激。