Je souhaite partager un objet entre mes servlets et mon service Web (JAX-WS) en le stockant comme attribut de contexte de servlet. Mais comment puis-je récupérer le contexte de servlet d'un service Web?
Le contexte de servlet est mis à disposition par JAX-WS via le contexte de message, qui peut être récupéré à l'aide du contexte de service Web. L'insertion du membre suivant fera que JAX-WS injectera une référence au contexte du service Web dans votre service Web:
import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
...
@Resource
private WebServiceContext context;
Ensuite, vous pouvez accéder au contexte de servlet en utilisant:
ServletContext servletContext =
(ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
Si vous utilisez Maven, ajoutez cette dépendance !!!
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
J'ai donc résolu d'éviter une erreur de conflit pour obtenir ServletContext INFO:
Et dans la méthode de classe que j'utilise
@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());