Apache Camel Java DSL передает параметр класса методу компонента

Я использую Camel 2.13.1. Я хочу передать класс в качестве параметра одному из моих методов в bean-компоненте.

Могу я сделать что-нибудь вроде

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

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

Я знаю, что могу отправить квалифицированное имя класса в заголовке и использовать его в bean-компоненте, но это не слишком хорошо. Есть ли другие альтернативы?

Я видел эту ссылку, но она не сработала для меня Apache Camel - Spring DSL - передать строковый аргумент методу компонента


person Richie    schedule 06.11.2014    source источник


Ответы (2)


Параметр метода типа Class не поддерживается. Из документации Camel:

Camel использует следующие правила, чтобы определить, является ли это значением параметра в опции метода.

  • Значение может быть истинным или ложным, что означает логическое значение.
  • Значение представляет собой числовое значение, например 123 или 7.
  • Значение представляет собой строку, заключенную в одинарные или двойные кавычки.
  • Значение равно null, что означает нулевое значение.
  • Его можно оценить с помощью простого языка, что означает, что вы можете использовать, например, body, header.foo и другие простые токены. Обратите внимание, что токены должны быть заключены в $ {}.
person Peter Keller    schedule 06.11.2014

Вы можете попробовать использовать подстановочный знак «*». 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
person kaos    schedule 07.11.2014