我已经编写了使用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
答案 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'