2016-06-14 20 views
1

CamelでJettyを使用しようとしています。 私はPOMに依存関係を追加しました:次のようにCamel 2.15のJettyコンポーネントの設定

<dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-jetty</artifactId> 
     <version>2.15.5</version> 
    </dependency> 

マイCamelContextが初期化されます。

public void startCamelContext() throws Exception { 
    CamelContext camelContext = new DefaultCamelContext(); 
    camelContext.addComponent("jetty", new JettyHttpComponent8()); 
    camelContext.start(); 
} 

私のように定義されたエンドポイントとルートを持っている私のサービス、起動しようとすると:

jetty:http://0.0.0.0:9000/httpInput 

私は例外を取得:

java.lang.NullPointerException: null 
at org.apache.camel.component.jetty8.JettyHttpComponent8.createConnectorJettyInternal(JettyHttpComponent8.java:48) 
at org.apache.camel.component.jetty.JettyHttpComponent.createConnector(JettyHttpComponent.java:585) 
at org.apache.camel.component.jetty.JettyHttpComponent.getSocketConnector(JettyHttpComponent.java:527) 
at org.apache.camel.component.jetty.JettyHttpComponent.getConnector(JettyHttpComponent.java:517) 
at org.apache.camel.component.jetty.JettyHttpComponent.connect(JettyHttpComponent.java:320) 
at org.apache.camel.component.http.HttpEndpoint.connect(HttpEndpoint.java:185) 
at org.apache.camel.component.http.HttpConsumer.doStart(HttpConsumer.java:53) 
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) 
at org.apache.camel.impl.DefaultCamelContext.startService(DefaultCamelContext.java:2885) 
at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRouteConsumers(DefaultCamelContext.java:3179) 
at org.apache.camel.impl.DefaultCamelContext.doStartRouteConsumers(DefaultCamelContext.java:3115) 
at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3045) 
at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:2813) 
at org.apache.camel.impl.DefaultCamelContext.startAllRoutes(DefaultCamelContext.java:865) 

Jettyコンポーネントをセットアップする方法に関するドキュメントは、まったく欠けています。 JettyHttpComponentがCamel 2.15以降抽象化され、JettyHttpComponent8または9を使用してそのコンポーネントを設定する必要があると言われたメーリングリストのエントリが見つかりました。link

私の場合、私はCamel 2.15.5を使用していますクラスパスでJettyHttpComponent9を使用できず、8を使用すると上記の例外が発生します。 また、実際にそのコンポーネントを使用する方法についての情報がないので、関連するディスカッションhereも見つかりました。

答えて

0

これは通常、CamelContextの初期化/開始方法ではありません。原型を使用して開始し、次にJetty Mavenの依存関係を追加し、エラーを再現できるかどうかを確認してください。

キャメルの原型はここで見つけることができます:http://camel.apache.org/camel-maven-archetypes.html

0

はあなたがここにexplaineとして、生きているラクダを維持するために継続的なスレッドを作成する必要があり、スプリングの外ラクダコンテキストを起動するには:http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html

は心配しないで、Iいくつかのコードの下に持っているセットアップローカルホスト上の桟橋は以下となります。あなたのための8081を:

のpom.xml

<dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-jetty</artifactId> 
     <version>2.16.1</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-core</artifactId> 
     <version>2.16.1</version> 
    </dependency> 


import org.apache.camel.Exchange; 
import org.apache.camel.Processor; 
import org.apache.camel.builder.RouteBuilder; 
import org.apache.camel.main.Main; 
import org.apache.camel.main.MainListenerSupport; 
import org.apache.camel.main.MainSupport; 

import java.util.Date; 

/** 
* Created by mkbrv on 22/06/16. 
*/ 
public class CamelJetty { 

     private Main main; 

     public static void main(String[] args) throws Exception { 
      CamelJetty example = new CamelJetty(); 
      example.boot(); 
     } 

     public void boot() throws Exception { 
      // create a Main instance 
      main = new Main(); 
      // bind MyBean into the registry 
      main.bind("foo", new MyBean()); 
      // add routes 
      main.addRouteBuilder(new MyJettyRouteBuilder()); 
      // add event listener 
      main.addMainListener(new Events()); 

      // run until you terminate the JVM 
      System.out.println("Starting Camel. Use ctrl + c to terminate the JVM.\n"); 
      main.run(); 
     } 

     private static class MyJettyRouteBuilder extends RouteBuilder { 
      @Override 
      public void configure() throws Exception { 
       from("jetty:http://localhost:8081") 
         .process(exchange -> { 
          System.out.println("Invoked timer at " + new Date()); 
          exchange.getOut().setBody("Hi, this is Camel!"); 
         }) 
         .bean("foo"); 
      } 
     } 

     public static class MyBean { 
      public void callMe() { 
       System.out.println("MyBean.callMe method has been called"); 
      } 
     } 

     public static class Events extends MainListenerSupport { 

      @Override 
      public void afterStart(MainSupport main) { 
       System.out.println("MainExample with Camel is now started!"); 
      } 

      @Override 
      public void beforeStop(MainSupport main) { 
       System.out.println("MainExample with Camel is now being stopped!"); 
      } 
     } 
    } 

次に、http://localhost:8081に行くと、ようこそメッセージが表示されます。 これをさらに調整するのが楽しいです。

関連する問題