2014-09-09 5 views
0

У меня есть собственный компонент Camel, упакованный в отдельную банку. Как сообщил здесь:Camel: org.apache.camel.ResolveEndpointFailedException: Компонент не найден со схемой

http://camel.apache.org/how-do-i-add-a-component.html 

Я создал файл мета-INF/услуги/орг/апач/верблюд/компонент/водны (водно это имя схемы компонента), содержащий:

class=<full class name> 

все работает Когда я запускаю тестовую программу автономно. Однако, когда я пытаюсь развернуть его в контейнер (ServiceMix, karaf) он не может разрешить имя компонента схемы:

org.apache.camel.RuntimeCamelException: org.apache.camel.FailedToCreateRouteException: Failed to create route route7: Route(route7)[[From[aq:oprDequeuer]] -> [WireTap[properties:... because of Failed to resolve endpoint: aq://queue1 due to: No component found with scheme: aq 

Кроме того, когда я зарегистрировать компонент в явном виде:

CamelContext context = getContext(); 
    context.addComponent("aq", new AQComponent(context)); 

он работает отлично, включая ServiceMix.

+0

Как вы развернули компонент? Вы можете проверить, загружен ли ваш маршрут после запуска пучка. –

+0

Маршрут работает отлично, пока я явно ссылаюсь на развернутый компонент, как указано выше. –

+0

Имеет ли в вашем комплекте компонент osgi экспорт службы org.apache.camel.spi.ComponentResolver; component = aq, как это делают другие компоненты верблюда? –

ответ

0

Убедитесь, что файл в META-INF включен в JAR.

Если этот файл отсутствует, компонент не может быть обнаружен автоматически, и это ваша проблема. Когда вы создаете компонент для OSGi, возможно, плагин felix bundle каким-то образом не включает этот файл.

Предлагаю дважды проверить это и заглянуть внутрь встроенного JAR, если файл включен.

+0

Yup, каталог META-INF поставляется вместе с банкой со всеми файлами в ней. –

Смежные вопросы