Apache camel 如何使用JavaDSL在ApacheCamel中使用参数调用方法

Apache camel 如何使用JavaDSL在ApacheCamel中使用参数调用方法,apache-camel,Apache Camel,如何使用JavaDSL在Camel路由中调用方法?如果我对方法使用了错误的签名,我想在Eclipse中得到一个编译时错误 .bean(Foo.class, "setDetails("1", "Camel")") 这里我不会因为错误的方法签名而得到编译时错误,因为方法是在字符串中定义的。据我所知,这是不可能的,因为Camel通过反射API调用该方法 您可以做的是使用方法名在Foo.class中创建常量,然后在bean调用中使用常量,而不是硬编码的方法名字符串 但即使这样,您当然也可以在bean中

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

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

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

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

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

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

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

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

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

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

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

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

      • 删除方法参数,在消息交换上设置它们,并将它们注入
        @Header
        @Property
      • 将bean拆分为非常小的bean,只使用一个方法来除去方法名
      试试这个

      .bean(Foo.class, "setDetails(1, 'Camel')")
      
      • 如果第一个参数的类型为int,只需输入不带引号的数字即可
      • 第二个参数是String,所以应该将String放在单引号中
      试试这个

      .bean(Foo.class, "setDetails(1, 'Camel')")
      
      • 如果第一个参数的类型为int,只需输入不带引号的数字即可
      • 第二个参数是String,所以应该将String放在单引号中

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

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

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

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

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

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


      谢谢你的回复。但是我不相信
      不可能的说法,因为Camel通过反射API调用该方法。这是一个基本特性,我将尝试将其提交给Camel团队。感谢您的回复。但是我不相信
      不可能的说法,因为Camel通过反射API调用该方法。这是一个基本特性,我将尝试将其提升到Camel团队。