Sto cercando di ottenere alcuni contesti iniettati (ad esempio Session o HttpServletRequest) in un servlet che ho scritto, in esecuzione su Grizzly, ma niente di ciò che faccio sembra funzionare. L'intero processo sembra stallo piuttosto prematuramente con il seguente errore:Grizzly e ServletContainerContext
SEVERE: Missing dependency for field: javax.servlet.http.HttpServletRequest com.test.server.LolCat.hsr
il server è morto semplice, si compone di due file, il punto di ingresso statico (Main.java):
package com.test.server;
import java.io.IOException;
import java.net.URI;
import javax.ws.rs.core.UriBuilder;
import org.glassfish.grizzly.http.server.HttpServer;
import com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory;
import com.sun.jersey.api.core.ClassNamesResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;
public class Main {
private static URI getBaseURI() {
return UriBuilder.fromUri("http://localhost/").port(8080).build();
}
public static final URI BASE_URI = getBaseURI();
public static void main(String[] args) throws IOException {
ResourceConfig rc = new ClassNamesResourceConfig(LolCat.class);
HttpServer httpServer = GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
System.in.read();
httpServer.stop();
}
}
e il serlvet (LolCat.java):
package com.test.server;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
@Path(value = "/lol")
public class LolCat {
@Context HttpServletRequest hsr;
@GET
@Path(value="/cat")
public String list() {
return "meow";
}
}
in particolare, è il contesto della riga @ nel file di origine sopra che è la fonte e la soluzione a tutti i miei problemi. Ne ho bisogno, e secondo tutto quello che ho letto su Jersey e Servlets dovrebbe funzionare, ma purtroppo no. Ho anche provato a utilizzare GrizzlyWebContainerFactory invece di GrizzlyServerFactory, ma senza risultato.
Per riferimento, il progetto viene compilato con le seguenti dipendenze:
- org.glassfish.grizzly: grigio-quadro: jar: 2.2.21
- org.glassfish.grizzly: grigio-http: jar: 2.2.21
- org.glassfish.grizzly: grizzly-http-servlet: jar: 2.2.21
- org.glassfish.grizzly: grizzly-http-server: jar: 2.2.21
- com. sun.jersey: jersey-server: jar: 1.17
- com.sun.jersey: jersey-servlet: jar: 1.17
- com.sun.jersey: jersey-core: jar: 1.17
- javax.servlet: javax.servlet-api: jar: 2.5.0
- com.sun.jersey: jersey-grizzly2: jar: 1.17
- com.sun.jersey: jersey-grizzly2-servlet: jar: 1.17
- asm: asm: vaso: 3.3.1
Ha funzionato, con il tipo sicurezza di testo in chiaro :). È possibile registrare una classe senza utilizzare setInitParameter String/String? – Mic
Penso che la GrizzlyWebContainerFactory di Jersey potrebbe essere estesa/migliorata, quindi non avresti bisogno di gestire i parametri di init, ma in ogni caso sarà un wrapper sullo stesso codice di registrazione di WebappContext. – alexey
Help! .. Il mio codice arriva fino a 'WebappContext context = new WebappContext (...' poi si blocca improvvisamente con 'Exception in thread" main "java.lang.NoSuchMethodError: org.glassfish.grizzly.utils.DataStructures. getConcurrentMap (IFI) Ljava/util/concurrent/ConcurrentMap; '. Provato con Java 7 e 8, utilizzando jersey-container-grizzly-http: 2.5 e jersey-container-grizzly2-servlet: 2.5 –