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?
Réponses
Trop de publicités?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);
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;
}
}