41 votes

Comment puis-je accéder à la ServletContext dans un JAX-WS web service?

Je veux partager un objet entre mes servlets et mon webservice (JAX-WS), en les stockant comme une servlet contexte de l'attribut. Mais comment puis-je récupérer le contexte de servlet à partir d'un service web?

45voto

Jens Bannmann Points 1148

La servlet contexte est mis à disposition par JAX-WS via le contexte du message, qui peut être récupéré en utilisant le service web contexte. L'insertion, membre de la cause JAX-WS pour injecter une référence vers le service web du contexte à votre service web:

@Resource
private WebServiceContext context;

Ensuite, vous pouvez accéder à la servlet contexte à l'aide de:

ServletContext servletContext =
    (ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);

3voto

pihentagy Points 1111

Sauvé ma journée.

Mais notez qu'il est accessible juste après le ctor fini :(

Donc, ne pas savoir comment comprendre l'applicationContext avec pas beaucoup de code réutilisable...

Toutes les idées comment la réduire?

import javax.annotation.Resource;
import javax.jws.WebService;
import javax.servlet.ServletContext;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

@WebService
public class MyWebService {


    // boilerplate code begins :(

    @Resource
    private WebServiceContext context;
    private WebApplicationContext webApplicationContext = null;

    /**
     * @return
     * @throws IllegalStateException
     */
    private WebApplicationContext getWebApplicationContext()
    		throws IllegalStateException {
    	if (webApplicationContext != null)
    		return webApplicationContext;
    	ServletContext servletContext =
    			(ServletContext) context.getMessageContext().get(
    					MessageContext.SERVLET_CONTEXT);
    	webApplicationContext =
    			WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
    	return webApplicationContext;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X