我正在尝试根据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");
答案 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")
;