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
次の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 を参照してください。
OSGiでキャメルコンテキストを作成する場合、DefaultCamelContextの代わりにOsgiDefaultCamelContextを作成する必要があり、バンドルコンテキストを構築パラメーターとして渡す必要があります。
ブループリントまたはスプリングを使用している場合は、アプリケーションコンテキストからラクダコンテキストを検索して、新しいラクダコンテキストを自分で作成することで、はるかに簡単になります。
エントリをpomに追加するだけでなく、HTTPComponentオブジェクトをラクダのコンテキストに追加してみてください...
HttpComponent httpComponent = new HttpComponent();
context.addComponent("http", httpComponent);