web-dev-qa-db-ja.com

Apacheキャメルのスキームhttpエラーでコンポーネントが見つかりません

Apacheキャメルを使用してREST APIを呼び出すためのサンプルコードを作成しました。スタンドアロンで正常に動作していますが、OSGIバンドルを作成し、それをkarafコンテナーにデプロイするために使用したのと同じコードで、バンドルは正常に作成されますが、)などのエラーが発生しますスキームhttp "で呼び出そうとしたときにコンポーネントが見つかりません。

この問題の解決にご協力いただけますか?

これがコードです:

        CamelContext context = new DefaultCamelContext();
        context.addRoutes(new RouteBuilder() {
            public void configure() {
                from("direct:start")
                .setHeader(Exchange.HTTP_METHOD,simple("GET"))
                .to("http://10.10.10.10:8080/RestfulDemo/rest/get");
            }
        });

        context.start();

        ProducerTemplate template = context.createProducerTemplate();
        String headerValue = "application/xml";

        Map<String, Object> headers = new HashMap<String,Object>();
        headers.put("Content-Type", headerValue);

        Object result = template.requestBodyAndHeaders("direct:start", null, headers, String.class);
        Exchange exchange = new DefaultExchange(context); 
        String response = ExchangeHelper.convertToType(exchange, String.class, result); 
        System.out.println("Response : "+response);
        context.stop();

以下のエラー:

org.Apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: http://10.10.10.10:8080/RestfulDemo/rest/get due to: No component found with scheme: http
13
Azhaguvel A

次のsnippletをpom.xmlに追加します。

<dependency>
     <groupId>org.Apache.camel</groupId>
     <artifactId>camel-http</artifactId>
     <version>x.x.x</version>
     <!-- use the same version as your Camel core version -->
 </dependency>

OSGI/Karaf/ServiceMix/JBoss Fuse ESB環境でCamelを使用する場合は、Karafコンソールを介してバンドルを追加する必要があります。

features:install camel-http

Karaf用のキャメルのインストールについての詳細は、 http://camel.Apache.org/karaf を参照してください。

17
Peter Keller

OSGiでキャメルコンテキストを作成する場合、DefaultCamelContextの代わりにOsgiDefaultCamelContextを作成する必要があり、バンドルコンテキストを構築パラメーターとして渡す必要があります。

ブループリントまたはスプリングを使用している場合は、アプリケーションコンテキストからラクダコンテキストを検索して、新しいラクダコンテキストを自分で作成することで、はるかに簡単になります。

4
Willem Jiang

エントリをpomに追加するだけでなく、HTTPComponentオブジェクトをラクダのコンテキストに追加してみてください...

    HttpComponent httpComponent = new HttpComponent();
    context.addComponent("http", httpComponent);
0
Tatecabbage