2014-11-06 5 views
0

Я использую Camel 2.13.1 Я хочу передать класс в качестве параметра для одного из моих методов в компонентеApache Camel Java DSL передать параметр класса методу боба

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

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

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

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

Я видел эту ссылку, но она не работает для меня Apache Camel - Spring DSL - Pass String argument to bean method

ответ

0

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

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

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

Вы можете попробовать использовать символ дикой карты '*'. Camel попытается преобразовать параметр в правильный тип.

Маршрут:

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

Bean:

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

Camel контекст:

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 
Смежные вопросы