XFire como habilitar o proxy no Client RESOLVIDO?

6 respostas
Pedrosa

Ola, estou tentando consumir um webservice com Xfire, porem no ambiente de producao contem um proxy, estou setando as seguintes propriedaes de acordo com o site: http://xfire.codehaus.org/Client+API

HttpClientParams params = new HttpClientParams();
client.setProperty(CommonsHttpMessageSender.HTTP_CLIENT_PARAMS, params);
client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "300");
client.setProperty(CommonsHttpMessageSender.DISABLE_KEEP_ALIVE, "true");
client.setProperty(CommonsHttpMessageSender.DISABLE_EXPECT_CONTINUE, "true");
client.setProperty(CommonsHttpMessageSender.HTTP_PROXY_HOST, "MY_PROXY_ADDRESS");
client.setProperty(CommonsHttpMessageSender.HTTP_PROXY_PORT, "MY_PROXY_PORT");

Porem ainda ocorre erro de Timeout, alguem ja usou o Cliente do Xfire com proxy para me dar help?

Grato, Fabio Pedrosa.

6 Respostas

T

Se seu proxy server for Microsoft (MS ISA Server ou MS Proxy Server), use o NTLM Authorization Proxy Server para contornar esse problema (eu uso esse cara desde o tempo em que o Netscape não tinha suporte a NTLM Authentication com proxies).

http://ntlmaps.sourceforge.net/

Você faz o seu programa se conectar ao NTLM Authorization Proxy Server (sem autenticação de usuário), e faz o NTLM Authorization Proxy Server se conectar (com autenticação de usuário) ao seu proxy server da Microsoft.

Requer uma versão do Python funcionando na sua máquina (se for Windows, use o do ActiveState: http://www.activestate.com/Products/activepython/

Pedrosa

thingol, existe alguma maneira de simular um proxy?, pois no meu ambiente de desenvolvimento nao tenho um para testar, nao existe uma maneira de contornar o problema sem esses outros meios citados, de preferencia diretamente com o framework de webservice, o axis oferece melhor suporte nesses casos?

T

Se você tiver uma máquina Linux (pode ser uma máquina virtual) você pode tentar configurar um proxy Squid, mas como ele não tem esses problemas de autenticação não é um bom teste.
Criar uma máquina (real ou virtual) com Windows e MS ISA Server, se é isso que o seu cliente tem, é meio chato e pesado - você precisa de um Windows 2003 ou 2000 Server e uma cópia do MS ISA Server, o que leva um bom tempo para instalar e configurar. )

Pedrosa

O proxy aqui na producao eh o squid, vou tentar simular em nossa rede.

Pedrosa

Meu codigo completo esta assim:

public String obterLotesWS(String usuario, String senha, int idEmpresa)	throws Exception {
	URL url = new URL(getUrlWS());
	HttpClientParams params = new HttpClientParams();
        Client cliente = new Client(url);
	cliente.setProperty(CommonsHttpMessageSender.HTTP_CLIENT_PARAMS,params);
	cliente.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "300");
	cliente.setProperty(CommonsHttpMessageSender.DISABLE_KEEP_ALIVE,"true");
	cliente.setProperty(CommonsHttpMessageSender.DISABLE_EXPECT_CONTINUE,"true");
	cliente.setProperty(CommonsHttpMessageSender.HTTP_PROXY_HOST,getIpProxy());
	cliente.setProperty(CommonsHttpMessageSender.HTTP_PROXY_PORT,getPortaProxy());
	Object[] resultado = cliente.invoke("getLotesImpressaoWS",new Object[] { usuario, senha, idEmpresa });
	return resultado[0].toString();
}

Causando o seguinte erro:

java.net.ConnectException: Connection timed out: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
	at java.net.Socket.connect(Socket.java:519)
	at java.net.Socket.connect(Socket.java:469)
	at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
	at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
	at sun.net.www.http.HttpClient.New(HttpClient.java:306)
	at sun.net.www.http.HttpClient.New(HttpClient.java:323)
	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:788)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:729)
	at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:654)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:977)
	at java.net.URL.openStream(URL.java:1009)
	at org.codehaus.xfire.client.Client.<init>(Client.java:245)
	at br.com.pedrosa.ws.ClienteWs.obterLotesWS(ClienteWs.java:38)
	at br.com.pedrosa.ws.ClienteWs.main(ClienteWs.java:53)

Debugando o erro ocorre ao chamar a classe Client:

Client cliente = new Client(url)

Essa url eh o endereco completo do wsdl, existe outra forma de consumir esse servico no Client com Xfire, lembrando que o codigo funciona normalmente sem proxy.

Pedrosa

Resolvido basta adicionar as seguintes linhas antes do construtor:

System.setProperty (CommonsHttpMessageSender.HTTP_PROXY_HOST, getIpProxy());
System.setProperty(CommonsHttpMessageSender.HTTP_PROXY_PORT, getPortaProxy());
Criado 10 de outubro de 2007
Ultima resposta 11 de out. de 2007
Respostas 6
Participantes 2