【问题标题】:Failed to resolve endpoint: No component found with scheme: servlet无法解析端点:没有找到带有方案的组件:servlet
【发布时间】:2018-01-06 22:14:13
【问题描述】:

我正在尝试在 OSGI 中注册骆驼 servlet,但在启动时出现以下错误

Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: servlet://router due to: No component found with scheme: servlet
    at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:729)
    at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:80)
    at org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:219)
    at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:112)
    at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:118)
    at org.apache.camel.model.FromDefinition.resolveEndpoint(FromDefinition.java:69)
    at org.apache.camel.impl.DefaultRouteContext.getEndpoint(DefaultRouteContext.java:94)
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1278)
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:204)

servlet 注册,

<bean id="CamelServlet" class="org.apache.camel.component.servlet.CamelHttpTransportServlet" scope="prototype"/>

<osgi:service ref="CamelServlet">
    <osgi:interfaces>
        <value>javax.servlet.Servlet</value>
        <value>org.apache.camel.component.http.CamelServlet</value>
    </osgi:interfaces>
    <osgi:service-properties>
       <entry key="osgi.http.whiteboard.servlet.pattern" value="/camel/*"/>
        <entry key="osgi.http.whiteboard.context.select" value="(osgi.http.whiteboard.context.name=org.osgi.service.http.default)" />            
        <entry key="matchOnUriPrefix" value="true" />
        <entry key="servlet-name" value="CamelServlet"/>
    </osgi:service-properties>
</osgi:service>

我的骆驼上下文如下

<camelContext xmlns="http://camel.apache.org/schema/spring">
        <route id="route1">
            <from uri="servlet:router"/>
            <convertBodyTo type="java.lang.String" />
            <transform>
        <simple>${body.toUpperCase()}</simple>
         </transform>
       <!-- and then print to the console -->
        <to uri="stream:out"/>
        </route>
</camelContext>     

使用 camel 2.19.1 版本,所有必需的包都存在于类路径中

【问题讨论】:

  • 您确定camel-servlet 存在于类路径中吗?
  • @mgyongyosi: 我的类路径 org.apache.camel.camel-servlet-2.19.1 org.apache.camel.camel-spring-2.19.1, org.apache.camel 中有以下 jars .camel-http-common-2.19.1、org.apache.camel.camel-http-2.19.1、org.apache.camel.camel-core-2.19.1
  • 顺便说一句。 osgi:service 提示您使用 spring-dm。这已被完全弃用。你应该切换到蓝图。
  • @ChristianSchneider,我也尝试了蓝图,但得到了同样的错误。我还检查了骆驼-servlet包显示在活动状态,但不知何故找不到servlet组件

标签: java apache-camel osgi


【解决方案1】:

需要在运行时安装实现骆驼组件的功能:

feature:install camel-servlet

【讨论】:

    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 2017-11-16
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多