2016-06-14 45 views
1

我試圖開始與駱駝一起使用Jetty。 我已經加入的依賴到我的POM:在駱駝配置Jetty組件2.15

<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自駝峯2.15以來已經被抽象化,現在該組件必須使用JettyHttpComponent8或9進行配置。link

在我的情況中,我使用的是Camel 2.15.5並且JettyHttpComponent9在類路徑中不可用,並使用8給出上述異常。 我還發現相關討論here沒有關於如何實際使用該組件的信息。

回答

0

要啓動駱駝背景外彈簧,你需要創建一個連續線程保持駱駝的生命,像explaine這裏:http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html

別擔心,我下面有一些代碼,將設置在localhost車: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,您應該會看到一條歡迎信息。 玩得更高興。