2008-11-04 14 views

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); 
+5

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! –

+1

J'ai sauvé ma journée, mais il manque les importations que @pihentagy a publiées. –

+0

Existe-t-il d'autres ressources injectables autres que le contexte de service Web? –

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());