gpt4 book ai didi

java - 在基于 Apache Camel 蓝图的 OSGi 包中检测到重复的 ServletName

转载 作者:行者123 更新时间:2023-11-30 02:45:41 27 4
gpt4 key购买 nike

我正在尝试创建两个基于 Camel servlet 的 API(两个 OSGi 包)。我正在使用蓝图 XML,如 this example 所示.

这是两个蓝图 XML,

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<reference id="httpService" interface="org.osgi.service.http.HttpService"/>

<bean class="org.apache.camel.component.servlet.osgi.OsgiServletRegisterer"
init-method="register"
destroy-method="unregister">
<property name="alias" value="/digital"/>
<property name="httpService" ref="httpService"/>
<property name="servlet" ref="teamCamelServlet"/>
</bean>

<bean id="teamCamelServlet" class="org.apache.camel.component.servlet.CamelHttpTransportServlet"/>

<bean id="teamService" class="com.test.TeamService"/>

<camelContext xmlns="http://camel.apache.org/schema/blueprint">

<restConfiguration component="servlet" bindingMode="json" contextPath="/digital"
port="8181">
<dataFormatProperty key="prettyPrint" value="true"/>
</restConfiguration>

<rest path="/team" consumes="application/json" produces="application/json">
..content omitted
</rest>

</camelContext>

</blueprint>

其他blueprint.xml:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<reference id="httpService" interface="org.osgi.service.http.HttpService"/>

<bean class="org.apache.camel.component.servlet.osgi.OsgiServletRegisterer"
init-method="register"
destroy-method="unregister">
<property name="alias" value="/api"/>
<property name="httpService" ref="httpService"/>
<property name="servlet" ref="camelServlet"/>
</bean>

<bean id="camelServlet" class="org.apache.camel.component.servlet.CamelHttpTransportServlet"/>

<bean id="helloService" class="com.test.HelloService"/>

<camelContext xmlns="http://camel.apache.org/schema/blueprint">

<restConfiguration component="servlet" bindingMode="json" contextPath="/api"
port="8181">
<dataFormatProperty key="prettyPrint" value="true"/>
</restConfiguration>

<!-- defines the rest services using the context-path /user -->
<rest path="/hello" consumes="application/json" produces="application/json">
..content omitted
</rest>

</camelContext>

</blueprint>

但我收到此错误消息:

javax.servlet.ServletException: Duplicate ServletName detected: CamelServlet. Existing: CamelHttpTransportServlet[name=CamelServlet] This: CamelHttpTransportServlet[name=CamelServlet]. Its advised to use unique ServletName per Camel application.

我在这里做错了什么?我正在尝试在 Apache ServiceMix 中运行这两个 OSGi 包。如果部署了其中之一,那么它就可以正常工作。如果两者都部署,则只有第一个在工作。我是 Apache Camel 的新手,任何帮助都会很棒。我尝试过重新启动 ServiceMix,但没有成功。还尝试过清除 bundle 缓存。

最佳答案

当CamelHttpTransportServlet发现两个使用相同名称注册的servlet时,它会抛出异常“检测到重复的ServletName...”。

在示例中,OsgiServletRegisterer 的属性“servletName”未设置,因此注册器类使用默认值,即“CamelServlet”。

不过,还有更多的事情。在camel剩余配置中应该声明额外的端点属性来为camel提供有关要使用的servlet的信息(默认情况下它使用“CamelServlet”)。

因此,要启动两个单独的 servlet,您的配置应该如下所示:

注册bean配置:

<bean class="org.apache.camel.component.servlet.osgi.OsgiServletRegisterer"
init-method="register"
destroy-method="unregister">
<property name="alias" value="/digital"/>
<property name="httpService" ref="httpService"/>
<property name="servlet" ref="teamCamelServlet"/>
<property name="servletName" value="teamCamelServlet"/>
</bean>

Camel 休息配置:

<restConfiguration component="servlet" bindingMode="json" contextPath="/digital" port="8181">
<endpointProperty key="servletName" value="teamCamelServlet"/>
<dataFormatProperty key="prettyPrint" value="true"/>
</restConfiguration>

此解决方案应该适用于camel 2.14.1及更高版本

版本 2.14.0 包含一个错误,因此该解决方案不起作用 https://issues.apache.org/jira/browse/CAMEL-7971

关于java - 在基于 Apache Camel 蓝图的 OSGi 包中检测到重复的 ServletName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40271292/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com