如何在CamelBlueprintTestSupport中加载spring context xml文件以及如何在spring上下文中获取数据源对象xml

时间:2017-06-13 05:39:25

标签: spring apache-camel jbossfuse

如何在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" />

2 个答案:

答案 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;

}