我想使用ahc组件调用外部http服务,将camel-ahc依赖项添加到pom.xml,并且在karaf中安装了camel-ahc功能:
feature:install camel-ahc
已添加的捆绑包:
camel-ahc 和 wrap_file__home_ossl_.m2_repository_org_asynchttpclient_async-http-client_2.4.3_async-http-cl ...
我的代码是:
<camelContext id="jetty-ws-camel-ahc" xmlns="http://camel.apache.org/schema/blueprint" >
<route id="ahc-route">
<from uri="timer://webinar?period=20000"/>
<setHeader headerName="CamelHttpMethod">
<constant>GET</constant>
</setHeader>
<to uri="ahc:http://217.0.0.0:3030/sendSMS/mynumber/bye"/>
<log message="message sent!"/>
</route>
</camelContext>
但是我有一个警告,请求没有发送到http地址: WARN [Blueprint Extender:3]侦听器引起异常,将被忽略 java.util.concurrent.ExecutionException:java.lang.NoClassDefFoundError:org / reactivestreams / Publisher
原因:java.lang.ClassNotFoundException:org.reactivestreams.Publisher找不到wrap_file__home_ossl_.m2_repository_org_asynchttpclient_async-http-client_2.4.3_async-http-client-2.4.3.jar_Export-Package_org.asynchttpclient .__ version_2.4.3 >
我该怎么办?
答案 0 :(得分:0)
问题在于工件org.asynchttpclient/async-http-client
的自动包装。
默认情况下,包装使所有Import-Package子句成为可选,这有时使构建可靠的有线设置变得困难,因为当解析程序在查看导出的“可选”软件包的包之前先查看包装的包时,它们不会连接在一起,并且它们是可选的,即使稍后出现一秒钟,解析器也会很乐意跳过它们。
要对此进行测试,您可以bundle:refresh <id>
异步HTTP客户端捆绑包,然后查看bundle:tree-show <id>
包是否仍未连接(标记为WARNING
)。
要可靠地修复它,您可以基于官方的Apache Camel功能创建您自己的功能,并修改包装以强制某些导入(例如,将&Import-Package=org.reactivestreams,*;resolution:=optional
附加到wrap:
语句中)。
还可以看看Wrap Protocol。