在apache camel中找不到与http http错误的组件

时间:2014-03-08 03:53:08

标签: java apache-camel

我已经编写了使用apache camel调用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

5 个答案:

答案 0 :(得分:14)

将以下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

有关安装camel for Karaf的更多信息,请查看http://camel.apache.org/karaf

答案 1 :(得分:4)

如果在OSGi中创建camel上下文,则需要创建OsgiDefaultCamelContext而不是DefaultCamelContext,并且需要将bundle上下文作为构造参数传递。

如果您正在使用Blueprint或Spring,通过从Application上下文中查找camel上下文然后自己创建一个新的camel上下文,您可以轻松实现。

答案 2 :(得分:0)

不仅要尝试将条目添加到pom中,还要将HTTPComponent对象添加到驼峰上下文中,如此...

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

答案 3 :(得分:0)

初始化bean解决了这个问题。 我的应用程序将Camel与Spring Boot一起使用,并且DefaultCamelContext的“ scheme”值为Null,因为未设置httpComponent。

因此,找不到与方案有关的组件:https

在启动时初始化bean,该方案已按预期设置。

导入org.springframework.context.annotation.Bean;

@Bean({"http","https"})
HttpComponent httpComponent() {
    return new HttpComponent();
}   

答案 4 :(得分:0)

请在您的 pom 或 build.gradle 中添加 apache camel-http 依赖项,这将解决您的错误。

例如。实现组:'org.apache.camel',名称:'camel-http',版本:'3.1.0'