2012-02-08 6 views
1

Я пытаюсь использовать маршрутизацию верблюдов более динамически, но у меня были небольшие проблемы. (я использую верблюжьей core_2.9.0)Apache Camel - MethodNotFoundException в преобразовании

Я использую метод преобразования в определении маршрута

Object methodclass; 
String methodname; 

context.addRoutes(new RouteBuilder() { 
@Override 
public void configure() throws Exception { 
    // TODO Auto-generated method stub 
     from("vm:internal0"). 
     transform().method(methodclass, methodname). 
     to("vm:receiver"); 
    } 
}); 

Теперь, если есть это задание (предполагая, что я имею TransformLogic класс с помощью метода «преобразования»)

methodclass = new TransformLogic(); 
methodname = "transform"; 

я не проблема, но если у меня есть это задание

methodclass = TransformLogic.class; 
methodname = "transform"; 
. 
. 

Верблюд выброшен

org.apache.camel.FailedToCreateRouteException: Failed to create route route3 at: >>> Transform[bean{java.lang.Class, method=transform}] <<< in route: Route[[From[vm:internal0]] -> [Transform[bean{java.lang.Clas... because of org.apache.camel.component.bean.MethodNotFoundException: Method with name: transform not found on bean: class core.compoundterm.primitiveterm.DefaultTransformLogic of type: java.lang.Class 

Где я обижаю? Благодаря

ответ

1

Убедитесь, класс TransformLogic имеет либо - не по умолчанию конструктора без аргументов - или что имя методы является публичным статическим методом

+0

спасибо за ответ! У меня есть конструктор по умолчанию no-arg inTransformLogic и установка метода на статический i получает ту же ошибку. Я не понимаю, почему Camel пытается найти метод «transform» типа java.lang.class ?? – giacomolm

+0

А это похоже на ошибку, так как она делает .toString, чтобы установить имя, но затем пикап и использовать имя в качестве ссылки для bean-компонента. Будет зарегистрирован билет: https://issues.apache.org/jira/browse/CAMEL-4997 –

+0

Обходной путь заключается в передаче экземпляра вместо класса, который должен работать. –