Camel REST DSL - 已在使用的地址:绑定异常

时间:2017-10-31 11:41:06

标签: apache-camel osgi apache-karaf jbossfuse

我在项目中使用REST DSL Component和Jboss Fuse Karaf 6.3实例。我有两个问题

  1. 使用restConfiguration,我必须始终指定端口号。尝试使用组件作为“servlet”,仍然需要提供端口号。有办法避免这个吗?请注意,我不是在这里创建一个Web项目。

  2. One Bundle在端口8080上使用“restlet”组件暴露其余端点,工作正常。另一个Bundle试图用相同的restConfiguration暴露几个端点。现在这个包没有开始,因为以下异常

      

    引起:java.net.BindException:地址已在使用中:bind   at sun.nio.ch.Net.bind0(Native Method)[:1.8.0_111]

  3. 我在下面的两个捆绑包中使用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">
    

    对此有任何解决方案或建议吗?

2 个答案:

答案 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;组件,但下面提到的其他更改

  1. 将CamelHttpTransportServlet发布为Osgi服务
  2. <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" />
    
    1. 将其余配置更改为
    2. <restConfiguration bindingMode="json" component="servlet">
        <endpointProperty key="servletName" value="aCamelServlet" />
      </restConfiguration>
      

      另外,将camel-servlet添加到pom中。通过执行此操作,两个捆绑包都已启动并运行其自己的上下文路径。