Erro: java.net.ProtocolException: Server redirected too many times (20)

Opa rapaziada!!!

Tenho um applet q faz chamada ao meu servlet commandServlet.

Não sei do se trata…mas eu tenho a log que da console do java que aparaceu na estação (maquina cliente)

na log do servidor nao loga nada!!!

vejam:

java.net.ProtocolException: Server redirected too many  times (20)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at br.com.tes.gw.commandframework.HttpCommandSender.sendCommand(HttpCommandSender.java:85)
	at br.com.tes.gw.transferapplet.CommandSenderFacade.sendCommand(CommandSenderFacade.java:39)
	at br.com.tes.gw.transferapplet.operations.DownloadOperation.run(DownloadOperation.java:162)
br.com.tes.gw.commandframework.CommandException: java.net.ProtocolException: Server redirected too many  times (20)
	at br.com.tes.gw.commandframework.HttpCommandSender.sendCommand(HttpCommandSender.java:112)
	at br.com.tes.gw.transferapplet.CommandSenderFacade.sendCommand(CommandSenderFacade.java:39)
	at br.com.tes.gw.transferapplet.operations.DownloadOperation.run(DownloadOperation.java:162)
java.lang.Exception: br.com.tes.gw.commandframework.CommandException: java.net.ProtocolException: Server redirected too many  times (20)
	at br.com.tes.gw.transferapplet.CommandSenderFacade.sendCommand(CommandSenderFacade.java:45)
	at br.com.tes.gw.transferapplet.operations.DownloadOperation.run(DownloadOperation.java:162)
Caused by: br.com.tes.gw.commandframework.CommandException: java.net.ProtocolException: Server redirected too many  times (20)
	at br.com.tes.gw.commandframework.HttpCommandSender.sendCommand(HttpCommandSender.java:112)
	at br.com.tes.gw.transferapplet.CommandSenderFacade.sendCommand(CommandSenderFacade.java:39)
	... 1 more

alguem pode dar uma luz ae !!! por favor !

vlw galeraaa

A resposta tarda mas chega hauhuahuahua (Vou responder porque pode ser útil para alguém que chega aqui via google ou coisa parecida)

É muito provável que você esteja com problema de autenticação. Por exemplo, se na sua rede você usa algum proxy que exija autenticação de usuário e senha para fazer requests do seu servidor então você precisa dizer pro seu applet que na sua conexão HTTP ele deve usar proxy, passando assim o seu respectivo usuário e senha.

Se precisar de algum exemplo (código fonte) de como fazer isso é só avisar aqui no tópico que eu posto um fonte exemplo.

Espero ter ajudado!
Abraço!

Zell, se for possível favor postar um exemplo. Estou tentando gerar um client atraves do wsdl2java e tenho duas autenticações, uma do proxy da rede e outra do web service exposto. Como devo setar estas autenticações?

att,
Allysson

Beleza, vou te passar um exemplo que tenho aqui bem completo. Dai você olha ele e ve o que você precisa. Lembrando que esse exemplo é para se contectar a um site ou servidor da internet, onde a sua rede passa por um servidor proxy que exige autenticação de usuário.

NOTA:
HunterProperties.IS_USE_PROXY é um atributo boleano que indica se a rede local usa proxy para se conectar a internet.
HunterProperties.IS_USE_AUTENTICATION é um atributo boleano que indica se a rede proxy exige autenticação de usuário para se conectar a internet.
HunterProperties.PROXY_HOST é um string com o IP\nome do host proxy (o computador que faz o papel de proxy\gateway).
HunterProperties.PROXY_PORT número da porta do proxy.
HunterProperties.PROXY_USER seu usuário do proxy.
HunterProperties.PROXY_PASSWORD sua senha do proxy.

No mais espero ter ajudado. Abraço!
Segue o exemplo:

CLASSE QUE FAZ AS CONEXÕES:

import java.net.Authenticator;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;

public class ConnectionHunter {	
			
	private List<String> cookies;
	
	public ConnectionHunter(){
		
		cookies = new ArrayList<String>();
		
		if(HunterProperties.IS_USE_PROXY){
			if(HunterProperties.IS_USE_AUTENTICATION){
				Authenticator.setDefault(new ProxyAuthenticator(HunterProperties.PROXY_USER, HunterProperties.PROXY_PASSWORD));
			}
			System.setProperty("http.proxyHost", HunterProperties.PROXY_HOST);  
			System.setProperty("http.proxyPort", String.valueOf(HunterProperties.PROXY_PORT));
		}		
	}

	
	/**
	 * Executa uma requisição retornando a resposta em um {@link URLConnection}.
	 * @param urlPage : url da página.
	 * @param parameters : lista de parâmetros da requisição.
	 * @return retorna um {@link URLConnection} com a resposta da requisição.
	 * */
	public URLConnection request(String urlPage, RequestParameter... parameters) throws Exception {			
		URL url = new URL(addParametersInURL(urlPage, parameters));			
		URLConnection conn = url.openConnection();
		/* 
		 * Define propriedades antes da requisição.
		 * Nesse caso esta emulando o FireFox por segurança.
		 * */			
		conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; pt-BR; rv:1.9.2.7) Gecko/20100713 Firefox/3.6.7");
		conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
		conn.setRequestProperty("Accept-Language", "pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3");
		conn.setRequestProperty("Accept-Encoding", "gzip,deflate");
		conn.setRequestProperty("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");			
		conn.setRequestProperty("Proxy-Connection", "keep-alive");
		
		//Adiciona cookies no request.
		String allCookies = "";
		for(String cookie: cookies){
			allCookies += cookie + ";";
		}
		conn.setRequestProperty("Cookie", allCookies);
			
		//Executa o request.			
		conn.connect();
		
		//Atualiza cookies retornados se existirem.
		if(conn.getHeaderField("Set-Cookie") != null){
			
			String[] newCookies = conn.getHeaderField("Set-Cookie").split(";");
			
			//Atualiza cookies já existentes.
			for(String cookie: cookies){
				for(int i = 0; i < newCookies.length; i++){
					if(cookie.equals(newCookies[i])){
						cookie = newCookies[i];
						newCookies[i] = null;
					}
				}	
			}
			//Adiciona os novos cookies.
			for(int i = 0; i < newCookies.length; i++){
				if(newCookies[i] != null){
					cookies.add(newCookies[i]);
				}
			}
		}
		return conn;
	}

	
	/**
	 * Adiciona parâmetros de request na URL.
	 * @param url : URL na qual deseja-se adicionar os parâmetros.
	 * @param parameters : lista de parâmetros a ser adicionados.
	 * */
	private String addParametersInURL(String url, RequestParameter... parameters){		
		if(parameters.length > 0){			
			url += "?";			
			for(RequestParameter parameter: parameters){
				url += parameter.getParameter() + "&";
			}
			return url;
		}else{
			return url;
		}		
	}
}

CLASSE AUTENTICADORA:

import java.net.Authenticator;
import java.net.PasswordAuthentication;

public class ProxyAuthenticator extends Authenticator {

	private String user, password;

	public ProxyAuthenticator(String user, String password) {
		this.user = user;
		this.password = password;
	}

	protected PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(user, password.toCharArray());
	}

}

CLASSE DE PARÂMETROS:

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class RequestParameter {
	
	private String nameFiel, valueField;

	public RequestParameter(String name, String value){
		try {
			this.nameFiel = URLEncoder.encode(name, "UTF-8");
			this.valueField = URLEncoder.encode(value, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			System.err.println("Erro ao codificar atributo em UTF-8.");
			e.printStackTrace();
		}finally{
			this.nameFiel = name;
			this.valueField = value;
		}
	}
	
	public String getParameter(){
		return nameFiel + "=" + valueField;
	}
	
	public String getParameterName(){
		return nameFiel;
	}
	
	public String getParameterValue(){
		return valueField;
	}
}

Acabei de ter esse problema, eu tinha um outro servidor rodando na mesma porta. É só matar os redundantes.