Chcę udostępnić obiekt między moimi serwletami a moją usługą sieciową (JAX-WS), przechowując go jako atrybut kontekstu serwletu. Ale jak mogę odzyskać kontekst serwletu z usługi WWW?Jak uzyskać dostęp do ServletContext z usługi WWW JAX-WS?
37
A
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);
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());
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! –
Zapisano mi dzień, ale brak w nim importów opublikowanych przez @pihentagy. –
Czy istnieją inne zasoby do wstrzykiwania inne niż kontekst usługi WWW? –