2015-09-09 2 views
2

Я пытаюсь записать содержимое некоторых файлов в файл журнала Apache karaf (только для некоторого тестирования). Для этого я использую следующий маршрут с Camel:Использование верблюда Apache в пакетах на Apache karaf

from("file:C:/input?noop=true").process(new LogProcessor()).to(
      "stream:out"); 

LogProcessor ничего не делает прямо сейчас, и мой pom.xml выглядит следующим образом (построение его с Maven):

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

<!-- 

    Licensed to the Apache Software Foundation (ASF) under one or more 
    contributor license agreements. See the NOTICE file distributed with 
    this work for additional information regarding copyright ownership. 
    The ASF licenses this file to You under the Apache License, Version 2.0 
    (the "License"); you may not use this file except in compliance with 
    the License. You may obtain a copy of the License at 

     http://www.apache.org/licenses/LICENSE-2.0 

    Unless required by applicable law or agreed to in writing, software 
    distributed under the License is distributed on an "AS IS" BASIS, 
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    See the License for the specific language governing permissions and 
    limitations under the License. 
--> 

<modelVersion>4.0.0</modelVersion> 

<groupId>osgi</groupId> 
<artifactId>osgi</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>bundle</packaging> 

<name>osgi Bundle</name> 
<description>osgi OSGi bundle project.</description> 

<dependencies> 
    <dependency> 
     <groupId>org.osgi</groupId> 
     <artifactId>org.osgi.core</artifactId> 
     <version>4.2.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-core</artifactId> 
     <version>2.14.3</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-simple</artifactId> 
     <version>1.7.5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-stream</artifactId> 
     <version>2.14.3</version> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <version>2.3.7</version> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <Bundle-SymbolicName>osgi</Bundle-SymbolicName> 
        <Bundle-Version>1.0-SNAPSHOT</Bundle-Version> 
        <Bundle-Activator>osgi.Activator</Bundle-Activator> 
        <Export-Package> 
         osgi*;version=1.0-SNAPSHOT 
        </Export-Package> 
        <Import-Package> 
         * 
        </Import-Package> 
       </instructions> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Я также выполнил

features:install camel-stream 

на karaf и, конечно же, сам верблюд также установлен на карафе.

Но все-таки я получаю ошибку

[...]No component found with scheme: stream[...] 

на karaf.

Уже просмотрено много форумов и прочее, но не удалось найти решение ... любая помощь приветствуется!

ответ

3

Это немного догадка, но я предполагаю, что вы создали DefaultCamelContext внутри пускового активатора. Тогда Stream Component не загружается в этот контекст, если вы не сделаете это самостоятельно:

StreamComponent stream = new StreamComponent(); 
camelContext.addComponent("stream", stream); 
+0

Спасибо большое! Это была проблема, и теперь она наконец работает :) - это способ решить эту проблему или есть ли другое решение «лучшей практики»? Например, у меня возникла проблема simliar при попытке использовать CSV, но нет CsvComponent или что-то вроде этого, чтобы добавить – Milla

+0

Если вы создаете DefaultCamelContext самостоятельно, вам нужно добавить компоненты вручную. Если вы хотите использовать Spring, то он автоматически создаст CamelContext для вас со всеми доступными компонентами. См. Http://camel.apache.org/spring.html Если у вас нет ничего против использования Spring, то это моя рекомендация. Обратите внимание, что тогда вы больше не будете использовать Bundle Activator, так как Spring активирует ваш CamelContext и добавляет к нему маршруты. – jnupponen

+0

Весна прекрасно работает при запуске в консоли с помощью «mvn: camel run», но не работает при развертывании на Apache karaf. – Milla

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