# Jax Webservice Client IP Addresse auslesen



## 00d4vid (15. Februar 2010)

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:


```
@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?


----------



## Thomas Darimont (15. Februar 2010)

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.

```
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


----------



## 00d4vid (16. Februar 2010)

Ich nutze den integrierten Webserver.

Danke - hat einwandfrei funktioniert!


----------

