代码之家  ›  专栏  ›  技术社区  ›  Sai A

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

  •  2
  • Sai A  · 技术社区  · 7 年前

    如何使用Java DSL在驼峰路由中调用方法?如果我对方法使用了错误的签名,我想在Eclipse中得到一个编译时错误。

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

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

    4 回复  |  直到 7 年前
        1
  •  2
  •   burki    7 年前

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

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

    但即便如此,您当然可以在bean中重命名方法,而无需修改常量。功能将被破坏,但编译器仍会很高兴。

    如果bean专用于骆驼路线,并且在您的控制下 ,您所能做的最好的事情就是重构bean。

    • 删除方法参数,在消息交换上设置它们,并使用 @Header , @Property
    • 将bean拆分为非常小的bean,只使用一个方法来除去方法名
        2
  •  2
  •   Themis Pyrgiotis    7 年前

    试试这个

    .bean(Foo.class, "setDetails(1, 'Camel')")
    
    • 如果您的 第一个参数 类型为int只需将数字加上引号
    • 第二个参数 是字符串,所以应该将字符串放在单引号中。
        3
  •  2
  •   mikaelovi    6 年前

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

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

    .to("bean:Foo?method=setDetails(1, 'camel')")
    
        4
  •  1
  •   batwad    7 年前

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