2011-12-29 15 views
11

Ho una semplice molla & applicazione Jersey, che funziona perfettamente per consumare le richieste attraverso una semplice risorsa. Tuttavia, mi piacerebbe restituire una risposta JSON - contenente una semplice serializzazione JSON di un oggetto. Per raggiungere questo obiettivo, ho aggiunto una dipendenza di esperti per jersey-json. Non appena aggiungo questa dipendenza, tuttavia, ottengo questo errore all'avvio del server:fornitore Jersey Nessuna WebApplication è presente quando Jersey- * dipendenza aggiunto

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) 

Io non sono del tutto chiare su esattamente ciò che un fornitore è, ma sono abbastanza sicuro che ci dovrebbe essere un difetto uno trovato.

Per completezza, ecco la mia risorsa:

@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; 
    } 
} 

oggetto A Scan è un oggetto semplice Entity Bean.

La dipendenza mvn è:

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

Qualcuno sa il motivo per cui potrebbe essere sempre il No WebApplication provider is present eccezione? Qualche idea su come potrei risolverlo?

Grazie

+0

Sei sicuro di avere jersey-server sul classpath come bene? Ricorda, tutti i moduli jersey devono avere esattamente la stessa versione: non saranno in grado di trovare gli altri provider se questa condizione non viene soddisfatta. –

+0

Grazie Pavel - vai avanti e fai questo commento una risposta, e lo accetterò. – idbentley

+0

fatto, grazie! :) –

risposta

23

È necessario avere vaso jersey-server sul classpath pure. E devi assicurarti che tutti i tuoi jar siano della stessa versione, il runtime di Jersey non sarà in grado di utilizzare le classi fornite altrimenti.

supplementi (la maggior parte non probabile qui interessa, ma ..) v'è una recente modifica nella struttura del modulo - dipendenze servlet sono stati separati per nuovi moduli. Quindi, se stai usando servlet, potresti voler dipendere da jersey-servlet (che dipende da jersey-server).

+2

Grazie! Ho avuto questo con il server neo4j incorporato, che si è rotto quando ho aggiunto una dipendenza che includeva un client json. Ad esempio: http://lists.neo4j.org/pipermail/user/2011-November/013368.html – Stewart

+0

Inoltre, la jersey-servlet 1.17 produce lo stesso problema. Utilizzare invece 1.17.1. –

6

Ho anche questo problema. Il problema è stato risolto avendo la stessa versione per le dipendenze di maven "jersey-json" e "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

L'utilizzo di jersey-servlet è stato sufficiente per la mia istanza, senza bisogno di jersey-json. – Tires