Ich möchte durch Speichern sie als Servletkontext Attribut ein Objekt zwischen meinem Servlets und meine Webservice (JAX-WS) teilen. Aber wie kann ich den Servlet-Kontext von einem Web-Service abrufen?Wie kann ich auf die ServletContext aus einem JAX-WS Web Service?
37
A
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);
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());
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! –
meinen Tag gerettet, aber es fehlt die Importe, die @pihentagy geschrieben hat. –
Gibt es andere injizierbare Ressourcen als den Webdienstkontext? –