vaca tela significado pais mujer island corte amarillo jersey

tela - Dependen de las dependencias de HttpServletRequest con Jersey



jersey tela (2)

Las dependencias de servlet se separaron a otro módulo, intente agregar

<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-servlet</artifactId> <version>1.14</version> </dependency>

a tu pom.

Tengo un servidor Standalone Jersey ejecutándose al comienzo de mi JunitTest. Estoy probando si mi controlador JaxRS funciona, así como mi HttpClient personalizado. Tenga en cuenta que siempre he podido utilizar este JaxRsResourceController incrustado en glassfish.

Aquí está el JaxRsController (versión ligera)

@Path("root") public class JaxRsResourceController implements ResourceController<HttpServletRequest> { @Context private UriInfo context; @Context HttpServletRequest request; @Context HttpServletResponse response; @GET public String hello(){ System.out.println("Uri is "+this.context.getBaseUri().toString()); return "Hello "+peoples; } }

No tengo ningún problema con el cliente, pero cuando inicio el servidor, tengo:

GRAVE: The following errors and warnings have been detected with resource and/or provider classes: SEVERE: Missing dependency for field: javax.servlet.http.HttpServletRequest com.robustaweb.library.rest.controller.implementation.JaxRsResourceController.request SEVERE: Missing dependency for field: javax.servlet.http.HttpServletResponse com.robustaweb.library.rest.controller.implementation.JaxRsResourceController.response at com.sun.jersey.api.container.httpserver.HttpServerFactory.create(HttpServerFactory.java:172) at com.robustaweb.library.rest.server.JerseyServer.startServer(JerseyServer.java:44)

Básicamente, dice que en el momento de inyección de @Context, no hay dependencia en HttpServletRequest. Sin embargo, si elimino las anotaciones de @Context a petición y respuesta, pero las guardo para el UriInfo context , está bien, y puedo leer el Uri.

Cambié algunas veces el Maven pom que ahora es para forzar las libs en:

<dependencies> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>1.14</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>jsr311-api</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> </dependency> </dependencies>

Alguna idea ?


No fue fácil, pero me enteré. El problema es que en mi prueba JUnit, estaba creando el servidor así:

HttpServer server = HttpServerFactory.create(url);

Pero de esa forma, crea un contenedor liviano que no tiene contenedores de servlets, y también lo es el motivo del error. Entonces, para tenerlo todo, utilicé el jersey-test-framework que permite usar el contenedor web Grizzly (o incluso el Glassfish incrustado).

Aquí está el maven:

<dependencies> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>jsr311-api</artifactId> <version>1.1.1</version> </dependency> <!-- Unit test are using jersey server directly --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.sun.jersey.test.framework</groupId> <artifactId>jersey-test-framework</artifactId> <version>1.0.3</version> <scope>test</scope> </dependency> </dependencies>

Aquí está el JerseyServerTest: tenga en cuenta que se extiende JerseyTest

public class JerseyServerTest extends JerseyTest { protected String baseUri = "http://localhost:" + TestConstants.JERSEY_HTTP_PORT + "/"; public JerseyServerTest() throws Exception { super("com.robustaweb.library.rest.controller"); /* It''s possible to NOT call the super() but to manually do : 1) ApplicationDescriptor appDescriptor = new ApplicationDescriptor() .setRootResourcePackageName(resourcePackageName) // resource packages .setContextPath(contextPath) //context of app .setServletPath(servletPath); // context of spi servlet 2)setupTestEnvironment(appDescriptor); */ } @Test public void testHelloWorldRequest() { SunRestClient client = new SunRestClient(baseUri + "root"); String result = client.GET("", null); System.out.println(result); } @Test public void testDeleteRequest() { SunRestClient client = new SunRestClient(baseUri + "root"); String result = client.DELETE("john", null); System.out.println(result); } }

Y finalmente el archivo de recursos, que contiene @GET y @DELETE

@Path("root") public class JaxRsController extends JaxRsResourceController{ List<String> peoples = new ArrayList<String>(); @GET public String hello(){ System.out.println("Uri is "+getUri()); return "Hello "+peoples; } @DELETE @Path("{name}") public String deletePeople(@PathParam("name") String name){ System.out.println("deleting "+name); this.peoples.remove(name); return String.valueOf(peoples.size()); } }

¡Y ahora funciona! Tuve algo de ayuda en este artículo , y hay un pequeño capítulo sobre la documentación . El hecho de poder adjuntar el código fuente del framework de Jersey realmente ayudó, por lo que también ayuda a IntelliJ.