Конвертер типа Camel с внедрением зависимостей не создает экземпляра

У меня есть класс TypeConverter, который настроен в файле blueprint.xml с внедренной зависимостью через конструктор. Я могу убедиться, что класс создан при развертывании пакета OSGI в FuseESB.

Я применяю преобразователь типов с помощью элемента convertBodyTo в контексте верблюда

<convertBodyTo type="com.example.RegisterRequest" />

но это не удается с исключением создания экземпляра при построении преобразователя

Caused by: java.lang.InstantiationException: com.example.RegisterRequestConverter
    at java.lang.Class.newInstance0(Class.java:359)[:1.7.0_21]
    at java.lang.Class.newInstance(Class.java:327)[:1.7.0_21]
    at org.apache.camel.util.ObjectHelper.newInstance(ObjectHelper.java:1166) 

Если я добавлю конструктор noarg, конвертер будет создан, но, очевидно, без его зависимости.

Документация Camel для преобразователей типов http://camel.apache.org/type-converter.html заявляет, что

рекомендуется использовать статические методы для уменьшения кэширования, но методы экземпляра подходят, особенно если вы хотите разрешить необязательную инъекцию зависимостей для настройки конвертера.

Можно ли определять маршруты через xml и при этом вводить зависимость преобразователей типов?


person blank    schedule 07.06.2013    source источник


Ответы (1)


Нет, это невозможно. Преобразователь типов должен быть

  • статический метод
  • имеет открытый конструктор без аргументов

И не использовать IoC и т. Д.

Если вам нужен IoC и т. Д., Вам нужно будет вручную зарегистрировать экземпляр в Camel TypeConverterRegistry. Это может быть немного обременительно.

person Claus Ibsen    schedule 07.06.2013
comment
Правильно ли я предполагаю, что мне придется делать это на Java, а не через blueprint xml? - person blank; 07.06.2013