Ajuda com webservice

1 resposta
guilherme_ha

Olá pessoal, tenho um webservice em axis.
(ou seja crio a classe e coloco-a no tomcat e chamo pelo browser criando assim o webservice)

No entanto preciso saber o identificar quem está consumindo o serviço, seu IP, o hostname e talz…

eu tentei com

InetAddress endIP = null;
        try{
        	endIP = InetAddress.getLocalHost();
        }catch(Exception e){
        	e.printStackTrace();
        }

        system.out.println(endIP.getHostAddress());

Mas está sempre gravando o IP do servidor que esta no webservice.

Alguém teria uma dica ?

1 Resposta

TiagoW

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 "";
		}		
	}
Criado 27 de julho de 2009
Ultima resposta 27 de jul. de 2009
Respostas 1
Participantes 2