代码之家  ›  专栏  ›  技术社区  ›  Sandy

驼峰REST DSL-地址已在使用:绑定异常

  •  0
  • Sandy  · 技术社区  · 7 年前

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

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

    2. 一个包在端口8080处使用“restlet”组件公开rest端点,该组件工作正常。另一个包试图公开具有相同restConfiguration的两个端点。由于以下异常,此捆绑包尚未启动

      原因:java。网BindException:地址已在使用:bind 在太阳。nio。ch.Net。bind0(本机方法)[:1.8.0_111]

    我在两个包中都使用了下面这样的Spring DSL,一个是绑定关闭的,另一个是json。

    捆绑1

        <restConfiguration bindingMode="json" component="restlet" port="8080"/>
        <rest path="HelloService/rs">
    

    捆绑2

        <restConfiguration bindingMode="off" component="restlet" port="8080"/>
        <rest path="AnotherService/rs">
    

    有什么解决方案或建议吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Claus Ibsen    7 年前

    当使用restlet、jetty等时,您不能在karaf/jboss-fuse中使用多个bundle。当您使用servlet时,您只能重复使用同一个端口,就像您使用jboss-fuse附带的共享http服务/servlet一样。

    所以你应该这么做

     <restConfiguration bindingMode="off" component="servlet"/>
    

        2
  •  0
  •   Sandy    7 年前

    非常感谢克劳斯。

    我能够让它与“servlet”组件一起工作,但下面提到的其他更改很少

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

    此外,将camel servlet添加到pom中。通过这样做,两个包都可以启动并使用其自己的上下文路径运行。