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