Bom, eu utilizo o framework Metro ( https://metro.dev.java.net/ ) que vêm junto com o Glassfish, para desenvolvimento de webservices, já que o considero mais simples do que o Axis e com uma performance boa.
Este exemplo, portanto funciona no metro, que se baseia no uso de anotations. Não sei se funcionará no Axis/TomCat, mas talvez a partir dai você consiga pesquisar algo que se adapte a sua necessidade:
Primeiramente, você precisa de um objeto WebServiceContext, que armazena os dados do contexto onde o servlet responsável pelo webservice está rodando:
@Resource
private WebServiceContext contexto;
Como pode ver ele é inserido via injeção de dependencia, usando a annotation @Resource.
Este objeto contém um método chamado getMessageContext() que retorna um Map com os dados de cada requisição que chega ao WebService:
private HttpServletRequest getRequest() {
return (HttpServletRequest) contexto.getMessageContext().get(MessageContext.SERVLET_REQUEST);
}
Um desses dados, é justamente o objeto HttpServletRequest, que é o objeto que contém os dados da requisição, inclusive o IP do cliente:
private String getClientIP() {
HttpServletRequest request = getRequest();
if (request != null) {
return request.getRemoteAddr();
} else {
return "";
}
}