java.lang.ClassNotFoundException:使用camelahc组件时找不到org.reactivestreams.Publisher

时间:2019-03-18 12:25:01

标签: asynchronous apache-camel apache-karaf

我想使用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

我该怎么办?

1 个答案:

答案 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