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 ...
¿Cómo está configurando RESTEasy internamente? Con CXF, tengo que configurar la eliminación del fragmento '/ rest' en mi archivo de configuración Spring. –
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. –
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/* " –