2008-11-04 5 views

Antwort

40

Der Servlet-Kontext wird von JAX-WS über den Nachrichtenkontext zur Verfügung gestellt, die den Web-Service-Kontext abgerufen werden können. Einsetzen der folgenden Mitglieds verursacht JAX-WS einen Verweis auf den Web-Service-Kontext in Ihren Web-Service zu injizieren:

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

... 

@Resource 
private WebServiceContext context; 

Dann können Sie den Servlet-Kontext zugreifen verwenden:

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

Wenn Sie dies auf einem JBoss EAP-Stapel sind, und lassen Sie beginnen durch ein Naht Projekt Erstellung des Assistenten für neue Projekte in JBoss Developer Studio verwenden, können Sie mit einer commons-annotations.jar Datei in Ihrem WEB-INF/lib am Ende (mit unter anderem der @Resource Anmerkung). Das Endergebnis ist, dass Ihr WebServiceContext nicht gefüllt wird und Sie eine NullPointerException erhalten. Für uns bestand die Lösung einfach darin, die commons-annotations.jar zu entfernen, um sicherzustellen, dass die JBoss-Version verwendet wurde. Danach gingen die Dinge gut. Danke für die tolle Antwort, ein echter Lebensretter! –

+1

meinen Tag gerettet, aber es fehlt die Importe, die @pihentagy geschrieben hat. –

+0

Gibt es andere injizierbare Ressourcen als den Webdienstkontext? –

0

Wenn Sie Maven fügt diese Abhängigkeit hinzu !!!

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

So löste ich für vermeiden Konfliktfehler für get ServletContext INFO :

Und ich in der Klasse Methode

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