【发布时间】:2018-06-09 03:23:58
【问题描述】:
使用 Broadleaf 5.2.2-GA 版多租户版本
已添加以下 JUnit 执行源代码:
package com.test.simple;
import javax.annotation.Resource;
import org.broadleafcommerce.core.catalog.service.CatalogService;
import org.broadleafcommerce.test.config.BroadleafSiteIntegrationTest;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@BroadleafSiteIntegrationTest
public class JUnitTest {
@Resource
private CatalogService catalogService;
@Test
public void testInjectionWorks() {
Assert.assertNotEquals(catalogService, null);
}
}
完成了所需的设置,在站点 pom.xml 中添加了以下详细信息
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.broadleafcommerce</groupId>
<artifactId>integration</artifactId>
<version>${blc.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.broadleafcommerce</groupId>
<artifactId>integration</artifactId>
<version>${blc.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
得到以下错误
原因:org.hibernate.exception.GenericJDBCException:不能 在打开连接 org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54) 在 org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) 在 org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) 在 org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:304) 在 org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169) 在 org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67) 在 org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160) 在 org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1395) 在 org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:59) ...省略了71个常见框架原因: org.apache.commons.dbcp.SQLNestedException:无法加载 JDBC 驱动程序 类 'org.hsqldb.jdbcDriver' 在 org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1429) 在 org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) 在 org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 在 org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:70) 在 org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:292) 在 org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297) ...省略了76个常见框架原因: java.lang.ClassNotFoundException:org.hsqldb.jdbcDriver 在 java.net.URLClassLoader.findClass(URLClassLoader.java:381) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) 在 org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1420) ...省略了81个常用框架
问题 1:为什么它应该要求 HSQL 驱动程序,因为我已经将 SQL Server 配置为管理员和站点应用程序即将推出?
我添加了以下依赖项
<!-- https://mvnrepository.com/artifact/org.hsqldb/hsqldb -->
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>test</scope>
</dependency>
错误已解决,但出现如下新错误。
20:38:56.118 [主要] 错误 org.springframework.test.context.TestContextManager - 捕获异常 同时允许 TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@15bfd87] 准备测试实例 [com.bv.test.simple.JUnitTest@52d8ada] java.lang.IllegalStateException:无法加载 ApplicationContext 在 org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) 在 org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83) 在 org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:189) 在 org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:131) 在 org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 在 org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 在 org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:363) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206) 引起:org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'org.springframework.security.filterChains':无法解析引用 豆 'org.springframework.security.web.DefaultSecurityFilterChain#0' 同时 使用键 [0] 设置 bean 属性“sourceList”;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 用名字创建bean 'org.springframework.security.web.DefaultSecurityFilterChain#0': 无法创建类型的内部 bean '(inner bean)#861d892' [org.springframework.security.web.authentication.logout.LogoutFilter] 同时使用键 [4] 设置构造函数参数;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为“(内部 bean)#861d892”的 bean:无法解析 参考豆 'org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices#0' 同时使用键 [2] 设置构造函数参数;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 用名字创建bean 'org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices#0': 设置时无法创建内部 bean '(inner bean)#1a2955e7' 构造函数参数;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名称为 '(inner bean)#1a2955e7' 的 bean:Bean 实例化 通过工厂方法失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.security.core.userdetails.UserDetailsService]: 工厂方法“cachingUserDetailsService”抛出异常;嵌套的 例外是 org.springframework.context.ApplicationContextException: 注册了多个 UserDetailsService。请使用特定的 ID 参考或元素。在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:382) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:157) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1531) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1276) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:742) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) 在 org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:134) 在 org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) 在 org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) 在 org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:251) 在 org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) 在 org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) ... 省略了 25 个常见帧 原因: org.springframework.beans.factory.BeanCreationException:错误 用名字创建bean 'org.springframework.security.web.DefaultSecurityFilterChain#0': 无法创建类型的内部 bean '(inner bean)#861d892' [org.springframework.security.web.authentication.logout.LogoutFilter] 同时使用键 [4] 设置构造函数参数;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为“(内部 bean)#861d892”的 bean:无法解析 参考豆 'org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices#0' 同时使用键 [2] 设置构造函数参数;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 用名字创建bean 'org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices#0': 设置时无法创建内部 bean '(inner bean)#1a2955e7' 构造函数参数;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名称为 '(inner bean)#1a2955e7' 的 bean:Bean 实例化 通过工厂方法失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.security.core.userdetails.UserDetailsService]: 工厂方法“cachingUserDetailsService”抛出异常;嵌套的 例外是 org.springframework.context.ApplicationContextException: 注册了多个 UserDetailsService。请使用特定的 ID 参考或元素。在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:313) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:129) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:382) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:157) 在 org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:634) 在 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:145) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1193) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1095) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) ... 省略了 45 个常用帧 原因: org.springframework.beans.factory.BeanCreationException:错误 创建名为“(内部 bean)#861d892”的 bean:无法解析 参考豆 'org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices#0' 同时使用键 [2] 设置构造函数参数;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 用名字创建bean 'org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices#0': 设置时无法创建内部 bean '(inner bean)#1a2955e7' 构造函数参数;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名称为 '(inner bean)#1a2955e7' 的 bean:Bean 实例化 通过工厂方法失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.security.core.userdetails.UserDetailsService]: 工厂方法“cachingUserDetailsService”抛出异常;嵌套的 例外是 org.springframework.context.ApplicationContextException: 注册了多个 UserDetailsService。请使用特定的 ID 参考或元素。在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:382) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:157) 在 org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:634) 在 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:145) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1193) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1095) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:299) ...省略了59个常见框架原因: org.springframework.beans.factory.BeanCreationException:错误 用名字创建bean 'org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices#0': 设置时无法创建内部 bean '(inner bean)#1a2955e7' 构造函数参数;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名称为 '(inner bean)#1a2955e7' 的 bean:Bean 实例化 通过工厂方法失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.security.core.userdetails.UserDetailsService]: 工厂方法“cachingUserDetailsService”抛出异常;嵌套的 例外是 org.springframework.context.ApplicationContextException: 注册了多个 UserDetailsService。请使用特定的 ID 参考或元素。在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:313) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:129) 在 org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:648) 在 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:145) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1193) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1095) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) ...省略了69个常见框架原因: org.springframework.beans.factory.BeanCreationException:错误 创建名称为 '(inner bean)#1a2955e7' 的 bean:Bean 实例化 通过工厂方法失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.security.core.userdetails.UserDetailsService]: 工厂方法“cachingUserDetailsService”抛出异常;嵌套的 例外是 org.springframework.context.ApplicationContextException: 注册了多个 UserDetailsService。请使用特定的 ID 参考或元素。在 org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:299) ...省略了81个常见框架原因: org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.security.core.userdetails.UserDetailsService]: 工厂方法“cachingUserDetailsService”抛出异常;嵌套的 例外是 org.springframework.context.ApplicationContextException: 注册了多个 UserDetailsService。请使用特定的 ID 参考或元素。在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 在 org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ...省略了86个常见框架原因: org.springframework.context.ApplicationContextException:不止一个 UserDetailsService 已注册。请使用特定的 ID 参考 或元素。在 org.springframework.security.config.http.UserDetailsServiceFactoryBean.getUserDetailsService(UserDetailsServiceFactoryBean.java:125) 在 org.springframework.security.config.http.UserDetailsServiceFactoryBean.cachingUserDetailsService(UserDetailsServiceFactoryBean.java:54) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ...省略了87个常用框架
请帮助检查如何解决此错误。
【问题讨论】: