2011-12-29 12 views
11

Tengo una aplicación simple de Spring & Jersey, que funciona perfectamente bien para consumir solicitudes a través de un recurso simple. Sin embargo, me gustaría devolver una respuesta JSON, que contiene una serialización JSON simple de un objeto. Para lograr esto, he agregado una dependencia de maven para jersey-json. Tan pronto como añadir a la dependencia, sin embargo, me sale este error al iniciar el servidor:Jersey Ningún proveedor de aplicaciones web está presente cuando se agregó la dependencia jersey- *

com.sun.jersey.api.container.ContainerException: No WebApplication provider is present at  
    com.sun.jersey.spi.container.WebApplicationFactory.createWebApplication(WebApplicationFactory.java:69) at 
    com.sun.jersey.spi.container.servlet.ServletContainer.create(ServletContainer.java:391) 

No estoy totalmente claro sobre exactamente lo que un proveedor es, pero estoy bastante seguro de que debe haber un defecto uno encontrado.

Para completar, aquí es mi recurso:

@Path("/scan") 
@Resource 
@Component 
public class ScanResource { 
    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    @Path("/{barcode}") 
    public List<Scan> getScansForBarcode(@PathParam("barcode") Long barcode){ 
     ..snip.. 
     return results; 
    } 
} 

objeto A Scan es un simple objeto Entity Bean.

La dependencia MVN es:

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-json</artifactId> 
    <version>1.11</version> 
</dependency> 

¿Alguien sabe por qué lo debiera la excepción No WebApplication provider is present? ¿Alguna idea sobre cómo podría resolverlo?

Gracias

+0

¿estás seguro de que tiene Jersey-servidor en la ruta de clase así? Recuerde, todos los módulos de jersey deben tener exactamente la misma versión; no podrán encontrar proveedores entre sí si no se cumple esta condición. –

+0

Gracias Pavel - adelante y haz que este comentario sea una respuesta, y lo aceptaré. – idbentley

+0

hecho, gracias! :) –

Respuesta

23

Es necesario tener frasco Jersey-servidor en la ruta de clases también. Y debe asegurarse de que todos sus frascos sean de la misma versión, el tiempo de ejecución de Jersey no podrá usar las clases proporcionadas de lo contrario.

Además (lo más probable es que no sea relevante aquí, pero ...) hay un cambio reciente en la estructura del módulo: las dependencias de servlets se separaron en módulos nuevos. Entonces, si está utilizando servlets, es posible que desee depender de jersey-servlet (que depende jersey-server).

+2

¡Gracias! Lo tuve con el servidor neo4j incorporado, que se rompió cuando agregué una dependencia que incluía un cliente json. Por ejemplo, http://lists.neo4j.org/pipermail/user/2011-November/013368.html – Stewart

+0

Además, el jersey-servlet 1.17 produce el mismo problema. Use 1.17.1 en su lugar. –

6

También tuve este problema. El problema se resolvió teniendo la misma versión para las dependencias maven "jersey-json" y "jersey-servlet".

EX:

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-json</artifactId> 
    <version>1.13</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-servlet</artifactId> 
    <version>1.13</version> 
</dependency> 
+0

El uso de jersey-servlet fue suficiente para mi caso, sin necesidad de jersey-json. – Tires