web-dev-qa-db-fra.com

Comment puis-je accéder au ServletContext à partir d'un service Web JAX-WS?

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?

41
Jens Bannmann

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);
44
Jens Bannmann

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());
1
Mirko Cianfarani