2010-11-09 15 views
16

Estaba jugando con JAX-RS e hice una aplicación que llama a los servicios REST que producen JSON. Probé Jersey y todo fue bien, pero tuve que cambiar a RESTEasy ya que mi aplicación necesita ser desarrollada con JDK5. He cambiado de web.xml para algo como esto:RESTEasy - @Path requiere una ruta completa?

<web-app> 
<context-param> 
    <param-name>resteasy.scan</param-name> 
    <param-value>true</param-value> 
</context-param> 

<listener> 
    <listener-class> 
    org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap 
    </listener-class> 
</listener> 

<servlet> 
    <servlet-name>RESTEasy</servlet-name> 
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>RESTEasy</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 
<!-- ... --> 
</web-app> 

Así que esperamos que cada URL que comienza con/descanso para ser manejado por RESTEasy. Mis servicios son los siguientes:

@Path("/services") 
public class MyRESTServices { 

    @GET 
    @Path("service1") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Object service1(Blah blah) { 

    } 
} 

Esto funcionó muy bien usar Jersey, http://localhost/MyContext/rest/services/service1 estaba envuelto con el método() mi service1. Cuando cambio a RESTEasy, sin embargo, tenía un 404:

de estado HTTP 404 - No se pudo encontrar recursos para el pariente:/descanso/servicios/service1 de ruta completa: http://localhost/MyContext/rest/services/service1

Lo que significa que RESTEasy manejó la solicitud pero no pudo encontrar ningún servicio vinculado a esta URL.

En mi clase, cambiando @Path("/services") a @Path("/rest/services") funcionó, sin embargo. ¿Tienes alguna idea de por qué tengo este extraño comportamiento? Todos los tutoriales/docs que leí mencionado sólo rutas relativas, sin incluir el prefijo/descanso ...

+0

¿Cómo está configurando RESTEasy internamente? Con CXF, tengo que configurar la eliminación del fragmento '/ rest' en mi archivo de configuración Spring. –

+0

No configuro nada más que lo que puede ver en el archivo web.xml (escanear para anotaciones). Veré si la eliminación se puede configurar. –

+2

Qué vergüenza, estaba justo en frente de mí en los documentos: "La variable resteasy.servlet.mapping.prefix debe establecerse si su servlet-mapping para el servlet Resteasy tiene un url-pattern otro que/* " –

Respuesta

25

Solución: añadir lo siguiente en su web.xml

<context-param> 
    <param-name>resteasy.servlet.mapping.prefix</param-name> 
    <param-value>/rest</param-value> 
</context-param> 

Donde/resto es el comienzo de su <url-pattern>/rest/*</url-pattern>

(Fuente: http://docs.jboss.org/resteasy/docs/2.0.0.GA/userguide/html/Installation_Configuration.html#d0e72)

+0

Gracias. Tu frase "Dónde ..." es lo que me enderezó. Estaba usando/rest/* en el elemento param-value. – bmauter

+0

@Nebelmann Quiero tener mi url '" http: // localhost: 8080/MyContent/rest/services/service1 "' as '" http: // localhost: 8080/MyContent/services/service1 "' no quiero descansar en mi patrón de url ¿Me pueden ayudar a cómo definir eso? – 09Q71AO534

Cuestiones relacionadas