Como posso acessar o ServletContext de dentro de um serviço web JAX-WS?
-
06-07-2019 - |
Pergunta
Eu quero compartilhar um objeto entre meus servlets e meu webservice (JAX-WS), armazenando-o como um atributo de contexto servlet. Mas como eu posso recuperar o contexto servlet de um serviço web?
Solução
O contexto servlet é disponibilizado pela JAX-WS através do contexto da mensagem, que pode ser recuperada usando o contexto de serviço web. Inserir o seguinte membro fará com JAX-WS para injetar uma referência ao contexto de serviço da web em seu serviço web:
import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
...
@Resource
private WebServiceContext context;
Em seguida, você pode acessar o contexto servlet usando:
ServletContext servletContext =
(ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
Outras dicas
Se você usar Maven adicionar essa dependência !!!
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
Então, eu resolvido por erro de conflito evitar para get ServletContext INFO:
E na classe uso do método I
@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());
Se o objeto que você está tentando share é um arquivo, dizer myFile.txt
você pode usar o método abaixo:
A melhor maneira de fazer isso que eu uso é:
Thread.currentThread().getContextClassLoader().getResource("myFile.txt").getPath()
Isto dá o caminho de qualquer myFile.txt
arquivo colocado no diretório /WEB-INF/classes/
dentro da pasta WebContent
do WebApp.
ambiente em Eclipse JEE que você precisa para manter o myFile.txt
arquivo, que você pode querer ler dentro do Serviço Web, na pasta src
para que possa ser transportado para a pasta /WEB-INF/classes/
pelo implementador.