如何在CamelBlueprintTestSupport中加载spring context xml文件以及如何在spring上下文xml中获取数据源对象,问题是我在com.hotel.common.persistence上有一个像 java.lang.NullPointerException这样的异常。 dao.DAOFactory.getDAO(DAOFactory.java:27)我的假设是DAOFactory类没有得到映射器类。这是对的吗?
我已与您分享我的示例代码
这是我的测试类
公共类ContextRouteGetAvailabilityXmlTest扩展了CamelBlueprintTestSupport {
@Override
protected String getBlueprintDescriptor() {
return "OSGI-INF/blueprint/context-beans.xml,OSGI-INF/blueprint/context-config.xml,OSGI-INF/blueprint/context-route-getAvailability.xml";
}
@Override
protected void addServicesOnStartup(Map<String, KeyValueHolder<Object, Dictionary>> services){
BasicDataSource datasource = new BasicDataSource();
datasource.setDriverClassName("com.mysql.jdbc.Driver");
datasource.setUrl("jdbc:mysql://my ip:3306/test");
datasource.setUsername("test");
datasource.setPassword("test1");
datasource.setConnectionProperties("useUnicode=yes;characterEncoding=utf8;");
services.put("dataSourceMySQL", asService(datasource, null));
}
}
这是我的 spring context.xml 文件
<osgi:reference id="dataSourceMySQL" interface="javax.sql.DataSource"/>
<bean id="mybatisConfig" class="org.springframework.core.io.ClassPathResource">
<constructor-arg value="/META-INF/config/mybatis-config.xml" />
</bean>
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSourceMySQL" />
<property name="configLocation" ref="mybatisConfig" />
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactoryBean" />
</bean>
<!-- scan for mappers and let them be autowired -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.sia.csl.hotel.common.persistence.mapper" />
<property name="sqlSessionTemplateBeanName" value="sqlSession" />
</bean>
<bean id="daoFactory"
class="com.common.persistence.dao.DAOFactory" />
答案 0 :(得分:0)
OSGi Blueprint不支持Spring XML文件,只支持Blueprint XML文件。因此,您无法使用CamelBlueprintTestSupport
加载Spring XML文件。相反,你可以使用常规弹簧,通过驼峰测试弹簧模块。
如果你在OSGi上运行,那么不推荐使用Spring XML文件(Spring-DM)和EOL,并且应该不。相反,您应该将Spring XML文件迁移到OSGI Blueprint文件。
答案 1 :(得分:0)
这种方式我尝试加载数据库,我与你共享我的 DAOFactory.java 文件
公共类DAOFactory {
static Logger logger = Logger.getLogger(DAOFactory.class);
private static BundleContext bundleContext;
private static SqlSessionTemplate sqlSessionTemplate;
public static void setBundleContext(BundleContext arg0) {
bundleContext = arg0;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public static Object getDAO(Class DaoClassName) throws InvalidSyntaxException {
logger.debug("getDAO sqlSessionTemplate: "+sqlSessionTemplate);
if(sqlSessionTemplate == null ) {
setBundleContext(FrameworkUtil.getBundle(DAOFactory.class).getBundleContext());
sqlSessionTemplate = getSqlSession() ;
logger.debug("Received sqlSessionTemplate: "+sqlSessionTemplate);
}
return sqlSessionTemplate.getMapper(DaoClassName);
}
@SuppressWarnings("rawtypes")
private static ApplicationContext getApplicationContext() throws InvalidSyntaxException {
final String filter = "(org.springframework.context.service.name=" + bundleContext.getBundle().getSymbolicName() + ")";
logger.debug("Symbolic Name: "+filter);
final ServiceReference[] applicationContextRefs = bundleContext.getServiceReferences(ApplicationContext.class.getName(), filter);
@SuppressWarnings("unchecked")
final ApplicationContext applicationContext = (ApplicationContext) bundleContext.getService(applicationContextRefs[0]);
logger.debug("applicationContext: "+applicationContext);
return applicationContext;
}