jax-ws-client-ip bekommen
Ich versuche zum abrufen der client-IP mit JAX-WS, die ich verwendet habe:
@Resource
WebServiceContext wsContext;
MessageContext mc = wsContext.getMessageContext();
HttpServletRequest req = (HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST);
log.info("["+req.getRemoteAddr()+"])
Bekomme ich eine NullPointerException
im req, mc ist nicht null.
Meine Frage ist was-GLAS zu verwenden, für HttpServletRequest
denn ich bin mit einer Java stand-alone Anwendung?
Dank
InformationsquelleAutor bazic | 2012-10-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie man den webservice-client-Adresse für einen jax-ws-service hängt davon ab, ob Sie sind:
Servlet Webservices
Wenn Ihr webservice ist ein servlet verwenden Sie dann die Lösung der ersten post, die Folgendes enthält:
Anwendung Web Services : JAX-WS 2.1
Wenn Sie mit einer Java-Anwendung (Java SE) Sie haben keine servlet-Kontext, so dass die
HttpServletRequest
null. Sie müssen verwenden Sie die Methode, die später post, der die folgende Zeile:Hinweis: dies funktioniert nur mit der JAX-WS 2.1-stack/Referenz-Implementierung.
Anwendung Web Services : JAX-WS 2.2
In JAX-WS 2.2 der Wert von
JAXWSProperties.HTTP_EXCHANGE
hat sich geändert von "com.Sonne.xml.ws.http.exchange" (der Wert wurde in JAX-WS 2.1) "com.Sonne.xml.intern.ws.http.exchange". Das bedeutet, dass ein Aufrufnull zurück, die in JAX-WS 2.2 und Sie erhalten eine
NullPointerException
auf der zweiten Linie, und noch wichtiger ist, nicht bekommen kann die remote-Adresse des Clients.Wenn Sie der folgende Aufruf verwendet werden (die Verwendung der Literale Wert, pfui!):
erhalten Sie einen nicht-null-Wert und wird in der Lage sein zu erhalten, die client-Adresse.
So, wie Sie Holen Sie sich die remote-Adresse des Clients hängt davon ab, wie Sie bereitstellen Ihren code (servlet oder Anwendung) und welche version von JAX-WS (JAX-WS 2.1 oder 2.2).
Empfehlungen
Servlets: Wenn Sie die Implementierung Ihrer JAX-WS-webservice in einem servlet kann man immer verwenden, den Anruf, um das Eigentum
MessageContext.SERVLET_REQUEST
egal, welche version von JAX-WS 2 Sie verwenden.Anwendungen: Wenn Sie die Implementierung Ihrer JAX-WS-webservice in einer Anwendung können Sie jederzeit über den Aufruf
HttpExchange exchange = (HttpExchange)msgx.get("com.sun.xml.ws.http.exchange");
egal, ob Sie mit JAX-WS 2.1 oder 2.2, daher ist es wahrscheinlich besser, verwenden Sie die string-literal im code statt der symbolischenJAXWSProperties.HTTP_EXCHANGE
.Als geschmacklos als mit dem literal ist, ist es besser, robuster code, der funktioniert über JAX-WS-Versionen eher als schöner code, der nicht.
Ich hoffe, dass die JAX-WS-team das Problem zu beheben und irgendwann wiederherstellen des Wertes der
JAXWSProperties.HTTP_EXCHANGE
auf die nützlichen Wert wieder.Vielen Dank an die früheren Plakate, die zeigte, dass verschiedene Wege zu finden, die remote-Adresse von JAX-WS clients. Die information war sehr hilfreich 🙂
"com.sun.xml.ws.http.exchange"
. Aber mit dem string-literal"com.sun.xml.internal.ws.http.exchange"
Sie können ein Objekt und casten es zuHttpsExchange
. Getestet mit (offiziellen) Java 7 mit JAX-WS 2.2.InformationsquelleAutor Moa
wenn wir einen embedded Http-server , können wir die client-IP wie:
Dann in der web-Methode :
Hoffe es hilft jemand anderes
InformationsquelleAutor bazic
Hier ist eine Antwort, ich denke, Sie sollten initialisieren mc und req in WebMethod annotiert Methode.
Geting die IP-Adresse eines client Für Einen webservice
InformationsquelleAutor sgpalit
Den folgenden code funktionieren könnte:
MessageContext.SERVLET_REQUEST
als Schlüssel stattInformationsquelleAutor Raj Raman