2008-11-04 10 views

Odpowiedz

40

Kontekst serwletu jest udostępniany przez JAX-WS poprzez kontekst komunikatu, który można pobrać za pomocą kontekstu usługi WWW. Wkładanie następujących państw spowoduje JAX-WS wstrzyknąć odniesienie do kontekstu serwis internetowy w usłudze internetowej:

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

... 

@Resource 
private WebServiceContext context; 

Następnie można uzyskać dostęp do kontekstu serwletu przy użyciu:

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

Jeśli próbujesz to na stosie JBoss EAP i zaczynasz tworząc projekt Seam za pomocą Kreatora nowego projektu w JBoss Developer Studio, otrzymujesz w swoim WEB-INF/lib plik commons-adnotations.jar (zawierający m.in. adnotację @Resource). Rezultat końcowy jest taki, że Twój tekst WebServiceContext nie jest wypełniany i otrzymujesz wyjątek NullPointerException. Dla nas rozwiązaniem było po prostu usunięcie commons-adnotations.jar, aby upewnić się, że użyto wersji JBoss. Potem wszystko poszło gładko. Dzięki za wspaniałą odpowiedź, prawdziwy ratownik! –

+1

Zapisano mi dzień, ale brak w nim importów opublikowanych przez @pihentagy. –

+0

Czy istnieją inne zasoby do wstrzykiwania inne niż kontekst usługi WWW? –

0

Jeśli używasz Maven dodaj tę zależność !!!

 <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.4</version> 
      <scope>provided</scope> 
     </dependency> 

więc rozwiązać błędu uniknąć konfliktów Get ServletContext INFO :

A w metodzie klasy używam

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