2015-02-03 1 views
0

Я использую компонент camel-sftp для загрузки файла на SFTP-сервер. Код прост:Camel не находит компонент «sftp» в реестре и завершает работу

File source = new File(path); 
final String sftpUri = "sftp://" + userId + "@" + serverAddress + "/" + remoteDirectory+"?password="+pwd; 
CamelContext context = new DefaultCamelContext(); 
context.addRoutes(new RouteBuilder() { 
    @Override 
    public void configure() throws Exception { 
     from("file:/" + path).to(sftpUri); 
    } 
}); 
context.start(); 
Thread.sleep(10000); 
context.stop(); 

Однако верблюд имеет проблемы с поиском компонент SFTP. Активация журналов отладки в Camel жалуется:

| 62 - org.apache.camel.camel-core - 2.13.2 | Using ComponentResolver: [email protected] to resolve component with name: sftp 
| 62 - org.apache.camel.camel-core - 2.13.2 | Found component: sftp in registry: null 
| 62 - org.apache.camel.camel-core - 2.13.2 | Apache Camel 2.13.2 (CamelContext: camel-16) is shutting down 

Любые идеи, почему Camel ведет себя таким образом? Фактически, запуск этого кода в автономном приложении (класс Java с методом main) работает правильно. И я вижу:

11:22:13.237 [main] DEBUG o.a.c.impl.DefaultComponentResolver - Found component: sftp in registry: null 
11:22:13.239 [main] DEBUG o.a.c.impl.DefaultComponentResolver - Found component: sftp via type: org.apache.camel.component.file.remote.SftpComponent via: META-INF/services/org/apache/camel/component/sftp 

Внутри из Karaf, однако, появляется только первая линия, по той или иной причине не находит META-INF/services/org/apache/camel/component/sftp и в результате компонент SFTP не найден.

ответ

1

Если вы запустите Camel внутри OSGi, вы должны использовать OSGi CamelContext от camel-core-osgi. И затем еще несколько шагов по настройке для OSGi.

Хотя его часто проще использовать приложение OSGi blueprint и загрузочный верблюд Camel в XML-файле проекта, который делает это правильно.

Но для Java-кода его некоторый ручной процесс. В предстоящем выпуске Camel 2.15 появился новый компонент camel-scr для работы с OSGi и SCR (Declarative Services), который упрощает создание Java-кода с помощью Camel в OSGi с помощью camel-scr.

Я хотел бы предложить, чтобы проверить его текущий исходный код для вдохновения, как вы можете настроить Верблюд в OSGi из Java кода

https://github.com/apache/camel/tree/master/components/camel-scr

+0

Использования OsgiDefaultCamelContext фактически решает эту проблему и делает ненужным встраивать верблюд-FTP свертка как зависимость (что делает узел больше, а что уродливо, потому что пул верблюдов-ftp уже присутствует в ServiceMix/Karaf). – Pavitx