2013-12-09 31 views
0

我想根據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; 
} 

} 

我是一個bigginner駱駝,至於據我瞭解,添加方法應該得到執行。我使用代理和Spring遠程調用來調用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"); 
+0

它沒有被調用,因爲你的過濾器正在過濾它!這就是過濾器的設計目的。克勞斯的答案描述瞭如何在'()'...'end()'時使用'choice()'。 – vikingsteve

回答

1

你應該使用的,而不是

的電子信息產品與實例這裏列出的過濾器EIP基於內容的路由器 http://camel.apache.org/eip

您正在尋找的EIP是 http://camel.apache.org/content-based-router.html

基於內容的路由器就像使用任何編程語言的if .. else if ... else if ... else控制結構一樣。

+0

我嘗試了你提到的,但仍然是同樣的問題 –

0

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