2010-11-02 7 views
17

Básicamente, hay una aplicación de fondo que expone servicios tanto SOAP como RESTful.¿Puedo usar Spring MVC y Spring WS en una sola aplicación?

He decidido utilizar primavera WS 1.5.8 para los servicios SOAP, y
Spring MVC 3.0 para los servicios REST ya que esta es una nueva característica.

al leer un poco sobre Spring WS (¡soy nuevo en esto!) Tenemos que declarar un "MessageDispatcherServlet" que es un controlador frontal, en web.xml para Spring WS.

Para Spring MVC deberíamos declarar un "DispatcherServlet" que también es un controlador frontal, en web.xml.

para ambos servlets tenemos diferentes declaraciones de servlet en web.xml.

es decir, para el resorte WS I tienen

<servlet> 
    <servlet-name>springsoap</servlet-name> 
    <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>springsoap</servlet-name> 
    <url-pattern>/soapservices/*</url-pattern> 
    </servlet-mapping> 

para Spring MVC (REST) ​​he

<servlet> 
<servlet-name>springmvc</servlet-name> 
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>springmvc</servlet-name> 
     <url-pattern>/restservices/*</url-pattern> 
    </servlet-mapping> 

Por lo tanto i debería utilizar 2 archivos de configuración ?? uno llamado springmvc-servlet.xml y otro springsoap-servlet.xml?

¿Se puede hacer esto?

Respuesta

17

Sí, esto está bien. Pones el material relacionado con MVC en uno, y el material de WS en otro.

Si tienen que compartir servicios, entonces lo mejor es declarar un contexto compartido usando ContextLoaderListener en web.xml, que define un tercer contexto que debe contener los granos compartidos (see docs for example of how to set this up).

Tampoco vale la pena que MessageDispatcherServlet sea simplemente un ensamblaje conveniente de un estándar DispatcherServlet más algunos otros componentes. Usted puede simplemente declare esos componentes usted mismo y use un DispatcherServlet, pero eso se pone bastante complicado.

+1

¡Gracias! :) Sé cómo configurar un applicationContext.xml usando ContextLoaderListener. –