当前位置: 首页 > 知识库问答 >
问题:

Apache CamelJavaDSL将类参数传递给bean方法

容远
2023-03-14

我正在使用Camel 2.13.1我想将一个类作为参数传递给bean中的一个方法

我能做些像

In Route
    --
     .beanRef("someSpringBeanRef","someMethod(${body},com.test.TestObject)")
    --

And in Bean
      public Object someMethod(String testBody, Class type){

我知道我可以在header中发送限定类名,并在bean中使用它,但感觉不太对。还有其他选择吗?

我看到了这个链接,但它不适合我Apache Camel-Spring DSL-将字符串参数传递给bean方法

共有2个答案

龙弘济
2023-03-14

不支持< code>Class类型的方法参数。来自Camel文档:

Camel使用以下规则来确定它是否是方法选项中的参数值

  • 该值为true或false,表示布尔值
  • 该值是一个数值,例如123或7
  • 该值是一个用单引号或双引号括起来的字符串
  • 该值为空,表示空值
  • 它可以使用Simple语言进行评估,这意味着您可以使用例如body、header。foo和其他简单令牌。请注意,令牌必须用${}括起来
孙才捷
2023-03-14

您可以尝试使用通配符“*”。Camel将尝试将参数转换为正确的类型。

路线:

public class Routes extends RouteBuilder {
     public void configure() throws Exception {
         from("direct:in").bean(new TestBean(), "test(*, ${body})");
     }
}

豆子:

public class TestBean {
    public void test(Class<?> clazz, String str) {
        System.out.println(clazz);
    }        
}

骆驼语境:

public static void main(String[] args) throws Exception {
    CamelContext ctx = new DefaultCamelContext();
    ctx.addRoutes(new Routes());
    ctx.start();        
    ctx.createProducerTemplate().sendBody("direct:in", String.class);
    ctx.createProducerTemplate().sendBody("direct:in", "java.lang.String");
}

输出:

class java.lang.String
class java.lang.String
 类似资料:
  • 问题内容: 我很好奇Go中是否有可能。我有多种方法的类型。是否可以有一个函数,该函数需要一个方法参数,然后将其称为类型? 这是我想要的一个小例子: Go认为type 有一个称为的方法,而不是用传入的方法名称替换它。 问题答案: 是的,有可能。您有2(3)个选项: 规范:方法表达式 该表达式产生的功能与第一个参数等效,但具有一个显式接收器。它有签名。 在这里,方法接收器是显式的。您只需将方法名称(具

  • 有时对一个类的某些方面进行 参数化(parameterize)是很有用的。例如, 你可能需要管理不同版本的 gem 软件包,既可以为每一种版本创建分离的单独的类, 也可以使用继承和覆盖,为一个类传递一个版本号作为参数。 操作步骤 声明参数作为如下类定义的一部分: class eventmachine( $version ) { package { "eventmachine": pro

  • 问题内容: 我是Spring的新手。 这是bean注册的代码: 这是我的bean类: 这是我执行操作的主要方法: 现在,我想用参数调用此构造函数,并且这些参数是在我的主要方法中动态生成的。这就是我想动态传递- 而不是像文件中声明的那样静态传递的意思。 问题答案: 请看一下构造函数注入。 此外,请查看IntializingBean和BeanPostProcessor,以了解Springbean的其他

  • 在Camel 2.10.1上,以下工作正常: 正在讨论的方法接受一个字符串参数 迁移到2.10.6,这不再起作用,它试图调用TEST作为另一个类。我尝试过用${}包装,尝试使用“ 我发现的唯一解决方案是使用常量语言将值放在标头中,然后使用简单调用标头。显然,这不是很干净... 你有什么想法怎么做吗? 干杯

  • 我想给@TestConfiguration类中的@Bean发送一个参数,根据参数中的字符串返回不同的AnimalType。有没有可能从一个测试类中进行,或者我需要为每个类设置不同的配置? 这也可以通过构造函数注入实现,但也不可能使用参数调用@TestConfig构造函数,该参数不是bean;

  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对