Creé un shell de aplicaciones básicas con AppFuse, y seguí el AppFuse tutorial para crear un servicio RESTful simple con Jax-RS. Eso funciona bien. Una llamada al http://localhost:8080/services/api/persons
devuelve una colección de objetos Person como una cadena con formato Json con los datos correctos.Obtenga HttpServletRequest en la aplicación Jax Rs/Appfuse?
Ahora me gustaría acceder a los objetos ServletRequest
y ServletResponse
desde un servicio RESTful expuesto por Appfuse (para usar otra biblioteca que requiera estos objetos).
I piensa que debería ser factible agregando una anotación @Context, p. siguiendo este StackOverflow post y este forum post.
Pero si agrego la etiqueta @Context (ver a continuación), compila bien pero arroja una excepción cuando se reinicia el servidor (se adjunta en la parte inferior).
Aquí está la declaración de la @WebService
:
@WebService
@Path("/persons")
public interface PersonManager extends GenericManager<Person, Long> {
@Path("/")
@GET
@Produces(MediaType.APPLICATION_JSON)
List<Person> read();
...
}
Y aquí es la clase de implementación en el que creo que yo llamaría el @Context
anotación:
@Service("personManager")
public class PersonManagerImpl extends GenericManagerImpl<Person, Long> implements PersonManager {
PersonDao personDao;
@Context ServletRequest request; // Exception thrown on launch if this is present
@Context ServletContext context; // Exception thrown on launch of this is present
...
}
suerte que me falta algo simple, ya sea algo incluir para que funcione, o para darse cuenta de que no se supone que obtener ServletRequest sea posible porque .... Cualquier pista sería bienvenida.
Estoy ejecutando esto en Tomcat en IntelliJ.
=== TRACE EXCEPCIÓN PILA (truncado) ===
Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'serviceBeans' threw exception; nested exception is java.lang.RuntimeException: java.lang.NullPointerException
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:102)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1358)
... 37 more
¡Muchísimas gracias! Aunque esto no funcionó exactamente como estaba escrito, dio una excepción diferente, y eso más la idea de hacer referencia a HttpServletRequest en lugar de solo ServletRequest fue la pista perfecta para descubrir cómo incluirlo correctamente. ¿Es apropiado un +1 en lugar de un cheque? – prototype
Hmmm eso es extraño. De hecho, pegué el código directamente desde un programa en funcionamiento. Siéntase libre de publicar su solución como una respuesta para que pueda beneficiar a los demás. – Perception
Luego debe haber otro artículo que necesite agregar a mi lista de cosas para aprender cómo funcionan los servicios de descanso. Saber eso también es útil. ¡Gracias de nuevo! – prototype