如何使用Java DSL在Apache Camel中调用带参数的方法

时间:2018-02-21 02:18:06

标签: apache-camel

如何使用Java DSL调用Camel Route中的方法?如果我使用方法的错误签名,我想在Eclipse中得到编译时错误。

.bean(Foo.class, "setDetails("1", "Camel")")

这里我不会因错误的方法签名而得到编译时错误,因为方法是在字符串中定义的。

4 个答案:

答案 0 :(得分:1)

据我所知,这是不可能的,因为Camel通过反射API调用该方法。

您可以做的是使用方法名称在Foo.class中创建常量,然后使用bean调用中的常量而不是硬编码的方法名称Strings。

但即便如此,你当然能够在不调整常量的情况下重命名bean中的方法。功能将被破坏,但编译器仍然会很高兴。

如果bean专用于Camel路由并且在您的控制之下,那么您可以做的最好是重构bean。

  • 删除方法参数,在消息交换上设置它们并使用@Header@Property
  • 注入它们
  • 将bean拆分为非常小的bean,只有一种方法可以删除方法名称

答案 1 :(得分:0)

试试这个

.bean(Foo.class, "setDetails(1, 'Camel')")
  • 如果第一个参数的类型为int,则只需输入不带引号的数字
  • 第二个参数是String,因此您应该将String放到单引号中。

答案 2 :(得分:0)

如果我正确理解了这个问题,那么您需要在运行时评估某些内容的编译时错误。这根本不可能。

答案 3 :(得分:0)

根据docs,从骆驼2.9开始,您可以在方法调用中使用整数和字符串作为参数(使用您的示例),如下所示:

.bean(Foo.class, "setDetails(1, 'camel')") 

OR

.to("bean:Foo?method=setDetails(1, 'camel')")