2011-02-17 14 views
11

¿Existe un marco, biblioteca o técnica que combine JAX-RS y JAX-WS (o funcionalidad equivalente) en un servicio combinado de forma similar al uso de dos puntos finales (un SOAP y uno RESTO) para el mismo servicio en WCF?JAX-RS y JAX-WS combinados

Respuesta

1

Complemento a la respuesta de Mikhail, ejemplo de la configuración de CXF. Más información se encuentra en 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" /> 

Actualización: Peter Szanto creó un proyecto experto en https://github.com/ExampleDriven/cxf-example

2

Es posible con una configuración de Tomcat estándar. Solo use URL separadas para los servicios. Decidí poner el servicio JAX-WS detrás de "SOAP /" y los demás detrás de letras minúsculas. Si desea usar "descansar" en la URL, es aún más fácil, pero no tan agradable para los usuarios finales. No olvides agregar sun-jaxws.xml también. Dejé `init-params ya que son útiles para URL normalizadas. Puedes soltarlos todos si lo deseas.

<?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> 
Cuestiones relacionadas