2017-06-13 57 views
0

如何在CamelBlueprintTestSupport中加载spring上下文xml文件以及如何在spring上下文中获取数据源对象xml,问题是我有一个异常像java.lang.NullPointerException在com.hotel.common.persistence.dao.DAOFactory.getDAO(DAOFactory.java:27)我的假设是DAOFactory类没有得到映射器类。这是对的吗?如何在CamelBlueprintTestSupport中加载spring上下文xml文件以及如何在spring上下文中获取数据源对象xml

我必须跟大家分享我的示例代码

这是我测试类

公共类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 f ILE

<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

OSGi的蓝图是不支持的Spring XML文件,而只是蓝图XML文件。所以你不能使用CamelBlueprintTestSupport加载Spring XML文件。相反,您可以使用常规弹簧,通过骆驼测试弹簧模块。

如果您在OSGi上运行,那么不推荐使用Spring XML文件(Spring-DM)并使用EOL,而应该使用而不是。相反,您应该将Spring XML文件迁移到OSGI Blueprint文件。

+0

这样,我试图加载数据库和我有与你分享我的DAOFactory.java文件 –

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; 

} 
相关问题