Комбинированные JAX-RS и JAX-WS - PullRequest
       11

Комбинированные JAX-RS и JAX-WS

11 голосов
/ 18 февраля 2011

Существует ли инфраструктура, библиотека или метод, который объединяет JAX-RS и JAX-WS (или эквивалентную функциональность) в одну комбинированную службу аналогично использованию двух конечных точек (одна SOAP и одна REST) ​​для одной и той же службы в WCF

Ответы [ 3 ]

5 голосов
/ 20 февраля 2011

Apache CXF может сделать эту работу. Узнайте больше на http://cxf.apache.org/docs/frontends.html

2 голосов
/ 15 апреля 2013

Это возможно при стандартной конфигурации Tomcat. Просто используйте отдельные URL для сервисов. Я решил поставить службу JAX-WS за SOAP /, а остальные за строчными буквами. Если вы хотите использовать «rest» в URL-адресе, это еще проще, но не очень приятно для конечных пользователей. Не забудьте также добавить sun-jaxws.xml. Я оставил `init-params, поскольку они полезны для нормализованных URL. Вы можете отбросить их все, если хотите.

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="webapp"
    version="2.5">
    <display-name>displayname</display-name>

    <filter>
        <filter-name>rest</filter-name>
        <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>thepackage</param-value>
        </init-param>
        <init-param>
            <!-- enables processing by JSPs if not JAX-RS handler is registered -->
            <param-name>com.sun.jersey.config.feature.FilterForwardOn404</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.config.feature.CanonicalizeURIPath</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.config.feature.NormalizeURI</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.config.feature.Redirect</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>rest</filter-name>
        <url-pattern>/firstresource/</url-pattern>
        <url-pattern>/secondresource/</url-pattern>

    </filter-mapping>

    <listener>
        <listener-class>
            com.sun.xml.ws.transport.http.servlet.WSServletContextListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>soap</servlet-name>
        <servlet-class>
            com.sun.xml.ws.transport.http.servlet.WSServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>soap</servlet-name>
        <url-pattern>/SOAP</url-pattern>
    </servlet-mapping>

    <session-config>
        <session-timeout>120</session-timeout>
    </session-config>

</web-app>
1 голос
/ 04 января 2013

Дополнение к ответу Михаила, пример конфигурации CXF.Больше информации на http://cxf.apache.org/docs/jax-rs-and-jax-ws.html#JAX-RSandJAX-WS-JAXRSandJAXWS

  <!-- JAX-RS -->
  <jaxrs:server id="customerService" address="/">
    <jaxrs:serviceBeans>
      <ref bean="customerService" />
    </jaxrs:serviceBeans>
  </jaxrs:server>

  <!-- JAX-WS -->
  <jaxws:endpoint implementor="#customerService"
    address="/CustomerWorld" wsdlLocation="..."/>

  <bean id="customerService" class="demo.jaxrs.server.CustomerService" />

Обновление: Питер Санто создал проект maven на https://github.com/ExampleDriven/cxf-example

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...