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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top