如何在eclipse IDE中调试Camel Route构建器?

时间:2015-07-23 08:31:43

标签: debugging apache-camel

我在Java DSL中编写了Camel Route构建,现在我想在eclipse IDE中调试它,我的课程看起来像

    try{
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
       }
 catch (org.openqa.selenium.UnhandledAlertException e) {                
         Alert alert = driver.switchTo().alert(); 
         String alertText = alert.getText().trim();
         System.out.println("Alert data: "+ alertText);
         alert.dismiss();}

我能够看到日志正在打印但有没有办法放置调试点(断点)并调试此Route构建器?

2 个答案:

答案 0 :(得分:1)

除了Claus提供的链接中描述的技术之外,我们还使用Hawtio控制台和Camel插件。

使用此插件,您可以:

  • 所有正在运行的Camel应用程序列表
  • 每个Camel Context的详细信息,例如Camel版本号,运行时静态
  • 每个Camel应用程序中所有路由的列表及其运行时统计信息
  • 管理所有Camel应用程序及其路由的生命周期,以便您可以重新启动/停止/暂停/恢复等。
  • 正在运行的路线的图形表示以及实时指标
  • 实时跟踪和调试正在运行的路线
  • 使用实时运行时静态配置运行路径;每处理器指定的详细信息
  • 浏览并向Camel端点发送消息

我知道你要求Eclipse,但我认为今天不可能逐步调试DSL,这就是我们主要使用Tracer启用模式的原因,并且在最后一种情况下,使用Hawtio控制台进行步骤 - 逐步调试。

答案 1 :(得分:0)

另一种技术是使用IDE的JUnit,但是你应该稍微修改你的类以便更好地测试它:

使用端点属性,例如更改

from("cxf:bean:process-manager-ws?dataFormat=POJO")
...
.to(RouterEndPoints.ENDPOINT_USERPROFILE_QUEUE.value()) // the two instances 

from("{{from.endpoint}}")
...
.to("{{user.profile.endpoint.1}}")
...
.to("{{user.profile.endpoint.2}}")

并使用spring或bluprint文件中的原始值设置属性(取决于您使用的是哪个)。

您可以在测试文件夹(src / test,如果使用maven)中创建一个名为PMRouteBuilderTest并使用扩展CamelTestSupport并具有以下内容的测试:

@EndpointInject(uri = "direct:test")
protected Endpoint inputTest;

@EndpointInject(uri = "mock:userEndpointOne")
protected MockEndpoint destinationOne;

@EndpointInject(uri = "mock:userEndpointTwo")
protected MockEndpoint destinationTwo;

@Test
public void testRoutingSampleToDestOne() throws Exception {

    destinationOne.expectedMessageCount(1);
    destinationTewo.expectedMessageCount(1);

    String body = "Anything that can make your test useful"
    sendBody(inputTest.getEndpointUri(), body);
    assertMockEndpointsSatisfied();
}

@Override
protected RouteBuilder createRouteBuilder() throws Exception {
    return new PMRouteBuilder();
}

@Override
protected Properties useOverridePropertiesWithPropertiesComponent() {
    Properties props = new Properties();

    // Set your test properties here, those are examples
    props.put("from.endpoint", "direct:test");
    props.put("user.profile.endpoint.1", "mock:userEndpointOne");
    props.put("user.profile.endpoint.2", "mock:userEndpointTwo");

    return props;
}

你必须尽可能地让你的测试使用真正的bean,但有时你不能,你必须使用像Mockito这样的模拟框架来模拟方法调用。 之后,您可以从IDE以调试模式执行测试,并将断点放到您在路径中使用的实际处理器中。

我强烈建议您阅读this article about Camel testing

为简单起见,我将测试类名称与Test一起作为后缀,但通常它应该被命名为PMRouteBuilderIT,因为它测试多个类并且应该在Integration Test阶段执行(mvn verify,带有failsafe插件)。