¿Cómo puedo acceder al ServletContext desde un servicio web JAX-WS?
-
06-07-2019 - |
Pregunta
Deseo compartir un objeto entre mis servlets y mi servicio web (JAX-WS) almacenándolo como un atributo de contexto de servlet. Pero, ¿cómo puedo recuperar el contexto de servlet de un servicio web?
Solución
JAX-WS pone a disposición el contexto del servlet a través del contexto del mensaje, que puede recuperarse utilizando el contexto del servicio web. Insertar el siguiente miembro hará que JAX-WS inyecte una referencia al contexto del servicio web en su servicio web:
import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
...
@Resource
private WebServiceContext context;
Luego, puede acceder al contexto del servlet usando:
ServletContext servletContext =
(ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
Otros consejos
¡Si usas Maven agrega esta dependencia!
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
Así que resolví evitar el error de conflicto para obtener ServletContext INFORMACIÓN:
Y en el método de clase que uso
@WebService(endpointInterface = "choice.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
@Resource
private WebServiceContext context;
public String sayHi(String text) {
HttpServletRequest request =(HttpServletRequest) context.getMessageContext().get(MessageContext.SERVLET_REQUEST);
System.out.println(request.getContextPath());
Si el objeto que está tratando de compartir es un archivo, diga myFile.txt
, puede usar el siguiente método:
La mejor manera de hacer esto que uso es:
Thread.currentThread().getContextClassLoader().getResource("myFile.txt").getPath()
Esto proporciona la ruta de cualquier archivo myFile.txt
ubicado en el directorio / WEB-INF / classes /
dentro de la carpeta WebContent
del Aplicación web.
En el entorno Eclipse JEE necesita mantener el archivo myFile.txt
, que puede querer leer dentro del Servicio Web, en la carpeta src
para que se pueda transportado a la carpeta / WEB-INF / classes /
por el implementador.