我在项目中使用REST DSL Component和Jboss Fuse Karaf 6.3实例。我有两个问题
使用restConfiguration,我必须始终指定端口号。尝试使用组件作为“servlet”,仍然需要提供端口号。有办法避免这个吗?请注意,我不是在这里创建一个Web项目。
One Bundle在端口8080上使用“restlet”组件暴露其余端点,工作正常。另一个Bundle试图用相同的restConfiguration暴露几个端点。现在这个包没有开始,因为以下异常
引起:java.net.BindException:地址已在使用中:bind at sun.nio.ch.Net.bind0(Native Method)[:1.8.0_111]
我在下面的两个捆绑包中使用Spring DSL,其中一个捆绑绑定,另一个捆绑json。
Bundle1
<restConfiguration bindingMode="json" component="restlet" port="8080"/>
<rest path="HelloService/rs">
bundle2中
<restConfiguration bindingMode="off" component="restlet" port="8080"/>
<rest path="AnotherService/rs">
对此有任何解决方案或建议吗?
答案 0 :(得分:2)
使用restlet,jetty等时,你不能使用karaf / jboss fuse中的多个包来执行此操作。当你使用servlet时,你只能重复使用相同的端口,因为你使用的是共享的http服务/ servlet开箱即用的JBoss Fuse。
所以你应该做
<restConfiguration bindingMode="off" component="servlet"/>
使用servlet时的端口号仅用于文档目的,如果你使用带有camel-swagger-java的swagger api-doc。
答案 1 :(得分:0)
非常感谢克劳斯。
我能够使用&#34; servlet&#34;组件,但下面提到的其他更改
<osgi:reference id="anHttpService" 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="/myService" />
<property name="httpService" ref="anHttpService" />
<property name="servlet" ref="aCamelServlet" />
<property name="servletName" value="aCamelServlet" />
</bean>
<bean id="aCamelServlet"
class="org.apache.camel.component.servlet.CamelHttpTransportServlet" />
<restConfiguration bindingMode="json" component="servlet">
<endpointProperty key="servletName" value="aCamelServlet" />
</restConfiguration>
另外,将camel-servlet添加到pom中。通过执行此操作,两个捆绑包都已启动并运行其自己的上下文路径。