Je souhaite partager un objet entre mes servlets et mon service Web (JAX-WS) en le stockant en tant qu'attribut de contexte de servlet. Mais comment puis-je récupérer le contexte de servlet à partir d'un service Web?Comment puis-je accéder au ServletContext à partir d'un service Web JAX-WS?
37
A
Répondre
40
Le contexte de servlet est mis à disposition par JAX-WS via le contexte de message, qui peut être récupéré en utilisant le contexte de service Web. Insertion de l'élément suivant provoquera JAX-WS pour injecter une référence au contexte de 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);
0
Si vous utilisez Maven ajoute cette dépendance !!!
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
Je résolus d'erreur éviter des conflits pour get ServletContext INFO :
Et dans la méthode de classe I utiliser
@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());
Si vous essayez ceci sur une pile EAP JBoss, et vous commencez En créant un projet Seam à l'aide de l'Assistant Nouveau projet dans JBoss Developer Studio, vous obtenez un fichier commons-annotations.jar dans votre WEB-INF/lib (contenant, entre autres, l'annotation @Resource). Le résultat final est que votre WebServiceContext n'est pas rempli, et vous obtenez une exception NullPointerException. Pour nous, la solution consistait simplement à supprimer le fichier commons-annotations.jar pour s'assurer que la version incluse dans JBoss était utilisée. Après cela, les choses se sont bien passées. Merci pour la bonne réponse, un vrai sauveur! –
J'ai sauvé ma journée, mais il manque les importations que @pihentagy a publiées. –
Existe-t-il d'autres ressources injectables autres que le contexte de service Web? –