【发布时间】: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