Jax Webservice Client IP Addresse auslesen

00d4vid

Mitglied
Hi,

ich programmiere gerade ein Tool, das per Webservice aufrufbar ist.
Hierfür nutze ich JAX. Nun möchte ich die IP-Addresse des aufrufenden Clients auslesen was laut Google so geht:

Java:
@WebService
@SOAPBinding(style=SOAPBinding.Style.RPC)
public class SOAPClasse {

	@Resource
	WebServiceContext wsContext;

	@WebMethod(operationName = "webMethod")
	public String webMethod(){
		// get client IP
		MessageContext msContext = wsContext.getMessageContext();
		String ipAddress = ((HttpServletRequest) msContext
				.get(MessageContext.SERVLET_REQUEST)).getRemoteAddr();
		System.out.println(ipAddress);
	return "";
	}

}
}

Dieses Konstrukt wirft allerdings eine Null-Pointer-Exception. Der Context an und für sich ist aber nicht leer, d.h. es ist nur der teil null, wo ich versuche, die Client IP auszulesen.

Weiß hier jemand Hilfe?
 
Zuletzt bearbeitet:
Hallo,

verwendest du einen AppServer / ServletContainer als Container für deine Webservices oder verwendest du JAX-WS mit dem in Java integrierten Webserver(seit Java 6: http://www.tutorials.de/forum/java/261228-java-6-mustang-wird-heute-released.html).

Bei letzterem schau mal hier:

Ausgehend von diesem Beispiel:
http://www.tutorials.de/forum/java/268800-einfache-webservices-unter-java-6-mustang.html

Kannst du Beispielsweise mit diesem Hack an die Remote-Adresse des Clients kommen.
Java:
package de.tutorials;

import java.util.Map;

import javax.annotation.Resource;
import javax.jws.WebService;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

@WebService(serviceName = "Calculator", portName = "Calculator", endpointInterface = "de.tutorials.ICalculator") 
public class Calculator implements ICalculator {

	@Resource private WebServiceContext webServiceContext;

	public int computeSumOf(int a, int b) {
		MessageContext messageContext = webServiceContext.getMessageContext();
		com.sun.net.httpserver.HttpExchange httpExchange = (com.sun.net.httpserver.HttpExchange ) messageContext.get("com.sun.xml.internal.ws.http.exchange");
		System.out.println(httpExchange.getRemoteAddress());

		return a + b;
	}
}
Gruß Tom
 
Zurück