0

我已经使用 camel-sql 编写了代码,它运行良好。现在我必须为此编写测试用例。我使用了内存数据库 H2。我已经初始化了数据库并将数据源分配给了 sqlComponent。

 // Setup code
    @Override
    protected JndiRegistry createRegistry() throws Exception {
        JndiRegistry jndi = super.createRegistry();

        // this is the database we create with some initial data for our unit test
        database = new EmbeddedDatabaseBuilder()
                .setType(EmbeddedDatabaseType.H2).addScript("createTableAndInsert.sql").build();

        jndi.bind("myDataSource", database);
        return jndi;
    }

    // Testcase code
    @SuppressWarnings("unchecked")
    @Test
    public void testRoute() throws Exception {

        Exchange receivedExchange  = template.send("direct:myRoute", ExchangePattern.InOut ,exchange -> {
            exchange.getIn().setHeader("ID", new Integer(1));
        });

        camelContext.start();
        MyClass updatedEntity = (MyClass)jdbcTemplate.queryForObject("select * from MY_TABLE where id=?", new Long[] { 1l } , 
                new RouteTest.CustomerRowMapper() );
        // Here I can get the updatedEntity from jdbcTemplate
        assertNotNull(receivedExchange);
        assertNotNull(updatedEntity);
    }

    // Main code
    from("direct:myRoute")
    .routeId("pollDbRoute")
        .transacted()
        .to("sql:select * from MY_TABLE msg where msg.id = :#"+ID+"?dataSource=#myDataSource&outputType=SelectOne&outputClass=com.entity.MyClass")
        .log(LoggingLevel.INFO,"Polled message from DB");

问题是,一旦测试用例开始,它就会说

No bean could be found in the registry for: myDataSource of type: javax.sql.DataSource 

我查看了骆驼 SQL 组件测试用例并做同样的事情,但代码无法找到数据源。请帮忙。提前致谢。

4

1 回答 1

0

在这个问题上花了很多时间后,我发现 H2 数据库正在使用 JDBCUtils 来获取记录并且它正在抛出 ClassNotFoundException。我在 Camel 异常层次结构中没有得到它,因为这个异常被抑制了,我得到的只是一个通用的异常消息。这是一个例外:

ClassNotFoundException: com.vividsolutions.jts.geom.Geometry

搜索问题后,我发现它需要一个更多的依赖项。所以我添加了它,它解决了这个问题。

问题网址:https ://github.com/elastic/elasticsearch/issues/9891

依赖:https ://mvnrepository.com/artifact/com.vividsolutions/jts-core/1.14.0

于 2017-10-28T09:33:06.710 回答