Camel过滤器 - 使用代理调用不同的bean

时间:2013-12-09 15:23:40

标签: apache-camel

我正在尝试根据bean输入调用不同的服务。但我的实例服务没有被调用。请找到以下代码:

我的路线

    from("jms:queue:instance").filter()
            .method(instanceTypeFilter, "isMCUInstance")
            .to("instanceservice").filter()
            .method(instanceTypeFilter, "isDMAInstance")
            .to("instanceservice").filter()
            .method(instanceTypeFilter, "isWSPInstance")
            .to("instanceservice").filter()
            .method(instanceTypeFilter, "isMEAInstance")
            .to("instanceservice").filter()
            .method(instanceTypeFilter, "isRSSInstance")
            .to("instanceservice");

调用以下方法调用

public class InstanceTypeFilter {
public boolean isMCUInstance(Instance instance) {
    System.out.println("Entering : InstanceTypeFilter : isMCUInstance");
    System.out.println("instance.getType() : " + instance.getType());
    return instance.getType() == "MCU";


 ......................

}

但是下面的代码没有被调用

   Service(value = "instanceservice")
   public class InstanceServiceImpl implements InstanceService {

public Instance add(final Instance instance) {
    System.out.println("Entering : InstanceServiceImpl : add");
    instance.setId("newId");
    instance.setName("newName");
    instance.setType("newType");
    System.out.println("Exiting : InstanceServiceImpl : add");
    return instance;
}

}

我是Camel的重要人物,至于我理解,添加方法应该被执行。我正在使用带有spring remoting的代理来调用add方法。

我尝试过如下,但问题仍然存在

  .when(method(InstanceTypeFilter.class, "isMCUInstance")
                    .isEqualTo(true))
            .to("instanceservice")
            .when(method(InstanceTypeFilter.class, "isDMAInstance")
                    .isEqualTo(true))
            .to("instanceservice")
            .when(method(InstanceTypeFilter.class, "isWSPInstance")
                    .isEqualTo(true))
            .to("instanceservice")
            .when(method(InstanceTypeFilter.class, "isMEAInstance")
                    .isEqualTo(true))
            .to("instanceservice")
            .when(method(InstanceTypeFilter.class, "isRSSInstance")
                    .isEqualTo(true)).to("instanceservice");

2 个答案:

答案 0 :(得分:1)

您应该使用基于内容的路由器而不是过滤器eip

此处列出的EIP包含示例 http://camel.apache.org/eip

您正在寻找的EIP就在这里 http://camel.apache.org/content-based-router.html

基于内容的路由器就像if .. else if .. else if ... else控制结构在任何编程语言中。

答案 1 :(得分:0)

而不是.to("instanceservice")尝试使用.to("bean:instanceservice?method=add").beanRef("instanceservice", "add");