Ich versuche, einen injizierten Kontext (zum Beispiel Session oder HttpServletRequest) in einem Servlet zu bekommen, das ich auf Grizzly geschrieben habe, aber nichts, was ich tue, scheint zu funktionieren. Der ganze Prozess scheint mit dem folgenden Fehler nicht vorzeitig zum Stillstand kommen:Grizzly und ServletContainerContext
SEVERE: Missing dependency for field: javax.servlet.http.HttpServletRequest com.test.server.LolCat.hsr
Der Server ist tot einfach, es besteht aus zwei Dateien, der statischen Eintrittspunkt (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();
}
}
und die 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";
}
}
Insbesondere ist es die @ Context-Linie in der obigen Quelldatei, die die Quelle und Lösung all meiner Probleme ist. Ich brauche es, und nach allem, was ich über Jersey und Servlets gelesen habe, sollte es funktionieren, aber leider nicht. Ich habe auch versucht, GrizzlyWebContainerFactory anstelle der GrizzlyServerFactory zu verwenden, aber ohne Erfolg.
Als Referenz wird das Projekt mit folgenden Abhängigkeiten zusammengestellt:
- org.glassfish.grizzly: Grizzly-Rahmen: jar: 2.2.21
- org.glassfish.grizzly: Grizzly-http: Glas: 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: Glas: 1.17
- com.sun.jersey: Trikot-Servlet: jar: 1,17
- com.sun.jersey: Trikot-Kern: jar: 1,17
- javax.servlet: javax.servlet-api: jar: 2.5.0
- com.sun.jersey: Trikot-grizzly2: jar: 1,17
- com.sun.jersey: Jersey-grizzly2-Servlet: jar: 1,17
- asm: asm: jar: 3.3.1
Es funktionierte, mit der Typsicherheit von Klartext :). Ist es möglich, eine Klasse ohne den String/String setInitParameter zu registrieren? – Mic
Ich denke, Jersey GrizzlyWebContainerFactory könnte erweitert/verbessert werden, so dass Sie nicht mit Init-Parameter beschäftigen müssen, aber es wird sowieso ein Wrapper über den gleichen WebappContext-Registrierungscode sein. – alexey
Hilfe! .. Mein Code geht so weit wie 'WebappContext context = neuer WebappContext (...' dann stürzt er plötzlich mit 'Exception im Thread" main "java.lang.NoSuchMethodError: org.glassfish.grizzly.utils.DataStructures ab. getConcurrentMap (IFI) Ljava/util/concurrent/ConcurrentMap; '. Versucht mit Java 7 und 8, Trikot-Container-Grizzly-http: 2.5 und Jersey-Container-Grizzly2-Servlet: 2.5 –