Предоставление маршрутов Camel в качестве REST-сервисов в Web-контейнере. - PullRequest
4 голосов
/ 14 апреля 2011

У меня есть верблюжий маршрут, который я хотел бы использовать в качестве веб-службы REST.Приложение разворачивается в веб-контейнере (Jetty / Tomcat), а Spring используется также для DI и других «инфраструктурных» вещей.

Я рассмотрел компоненты camel-restlet и camel-cxfrs, и хотя они обаОбеспечить поддержку выставления маршрутов в качестве REST-сервисов. Мне не удалось выяснить, как избежать запуска отдельного сервера.Что я действительно ищу, так это возможность определять маршрут Camel аналогично тому, как определяются маршруты для входящих конечных точек Spring-WS, например

from("restlet://application/user/{id}").to(...)

Настройка веб-приложения должна заботиться о принятии запросов ипередача их в соответствующие конечные точки.

Должен признать, я был очень удивлен, что не смог найти достаточно информации по этой теме, и я не думаю, что мои требования очень экзотичны.

Ответы [ 2 ]

5 голосов
/ 14 апреля 2011

см. Этот пример http://camel.apache.org/cxf-tomcat-example.html

Для Apache CXF вы можете использовать транспорт сервлетов, который позволяет вам подключиться к Tomcat / Jetty, являющемуся хост-контейнером.

А если вы используете OSGi, посмотрите на это: http://camel.apache.org/cxf-example-osgi.html он показывает, как использовать CXF с сервисом OSGi HTTP, который также должен работать для CXFRS.

3 голосов
/ 16 января 2014

Это поздний ответ, но может помочь другим.

Похоже, что Apache Camel поддерживает отображение веб-службы Restlet с помощью контейнера хоста (например, Tomcat / Jetty)

============== 8

Использование сервлета Restlet в веб-приложении

Доступно с верблюда 2.8 Существует три возможных способа настройки приложения Restlet в контейнере сервлета, а использование подкласса SpringServerServlet включает настройку в Camel путем внедрения компонента Restlet. Использование сервлета Restlet в контейнере сервлета позволяет настраивать маршруты с относительными путями в URI (устраняя ограничения жестко закодированных абсолютных URI) и для контейнера хост-сервлета обрабатывать входящие запросы (вместо того, чтобы создавать отдельный процесс сервера). на новый порт). Для настройки добавьте следующее в ваш camel-context.xml;

<camelContext>
  <route id="RS_RestletDemo">
    <from uri="restlet:/demo/{id}" />
    <transform>
      <simple>Request type : ${header.CamelHttpMethod} and ID : ${header.id}</simple>
    </transform>
  </route> 
</camelContext>



<bean id="RestletComponent" class="org.restlet.Component" />

<bean id="RestletComponentService" class="org.apache.camel.component.restlet.RestletComponent">
  <constructor-arg index="0">
    <ref bean="RestletComponent" />
  </constructor-arg>
</bean>
And add this to your web.xml;
<!-- Restlet Servlet -->
<servlet>
  <servlet-name>RestletServlet</servlet-name>
  <servlet-class>org.restlet.ext.spring.SpringServerServlet</servlet-class>
  <init-param>
    <param-name>org.restlet.component</param-name>
    <param-value>RestletComponent</param-value>
  </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>RestletServlet</servlet-name>
  <url-pattern>/rs/*</url-pattern>
</servlet-mapping>

После этого вы сможете получить доступ к развернутому маршруту на

http://localhost:8080/mywebapp/rs/demo/1234

where localhost:8080 is the server and port of your servlet container

============== snip snip> 8 ========================

Эта информация была найдена в нижней части http://camel.apache.org/restlet.html от 16 января 2014 г.

...