Erro em download JAD

Bom dia gente.
Desde já peço desculpas se estou postando na área errada, mas acho que não.
É o seguinte, tenho um app me que roda perfeitamente. Para fazer o download da app, coloquei ela no meu server (rodando em tomcat) a seguinte rotina:

private static String jadName = "/myApp.jad";

private static String jarName = "/myApp.jar";

public void sendFile(boolean isJar) throws IOException {
		InputStream in = getInputStreamToDownload(isJar);
		
		HttpServletResponse response = ServletActionContext.getResponse();
		if ( isJar){
			response.setContentType("application/java-archive");
			response.setHeader("Connection", "keep-alive");
			response.setHeader("Content-Disposition", "attachment; filename=\"myApp.jar\"");
		}
		else{
			response.setContentType("text/vnd.sun.j2me.app-descriptor");
			response.setHeader("Connection", "keep-alive");
			response.setHeader("Content-Disposition", "attachment; filename=\"myApp.jad\"");
		}
		OutputStream out = response.getOutputStream();
		int readlen, sentsize = 0;
		byte buffer[] = new byte[1024];
		while ((readlen = in.read(buffer)) != -1) {
			out.write(buffer, 0, readlen);
			sentsize += readlen;
		}
		out.flush();
		out.close();
		in.close();
	}

private InputStream getInputStreamToDownload(boolean isJar) {
		if (isJar) {
			return Thread.currentThread().getContextClassLoader().getResourceAsStream("app/1"+ jarName);
		} else {
			return Thread.currentThread().getContextClassLoader().getResourceAsStream("app/1"+ jadName);
		}
	}

ok… Este é o método responsável por fazer o donwload da aplicação.
Existe um outro método que identifica se a requisição veio de um celular (caso não tenha vindo, ele redireciona para uma página de erro).

Existe uma função chamada “downloadJAD” que retorna este código acima passando no parametro um “false” e uma outra função chamada “downloadJAR” que retorna o código acima passando no parametro “true”… Bom, parece bem simples, tudo isto.

Devo dizer que tudo funciona perfeitamente. Entretanto, no iPhone (e em alguns outros aparelhos) quando mando fazer download do JAD, ele abre o JAD no celular (isto mesmo, ABRE não executa).
Ele deveria fazer o download, como em todos os outros aparelhos, entretanto, ele abre o JAD como um arquivo txt. Todas as informações contidas em meu JAD são exibidas na tela do iPhone.

Alguém sabe como posso resolver isto? Estava pensando em criar algum tipo de WAP para isto.

COISAS QUE JÁ FIZ:

  • Configurei o tomcat (os mime types);
  • Testei um milhão de headers para o jad;
  • Testei deixar ele no server como link apenas (não é o que quero, mas se funcionasse deixaria assim até achar uma solução de verdade);

Bom… é isto ae, galera… Se alguém souber o que devo fazer, me de uma força ai.
Desculpem-me se postei na área errada, ok?

Att,

McLuck

3 coisas:

1 - IPhone nao roda Java
2 - O mime-type que você usando está correto.
3 - Veja quais os headers que vc está recebendo ao fazer esta requisicao. Para isto, tire esta “trava” que redireciona para uma tela de erro se vir pelo desktop a requisicao. Quando vc acertar o problema, recoloque-a. headers incorretos são a principal causa deste tipo de problema. São eles que sinalizam para o client (browser,celular,etc), qual o tipo de conteúdo que está chegando e a partir disto eles sabem como manipular…

E o sony ericsson? Também acontece a mesma coisa.
Este sim tem java.

o iPhone foi falha minha realmente.

[quote=McLuck]E o sony ericsson? Também acontece a mesma coisa.
Este sim tem java.

o iPhone foi falha minha realmente.[/quote]

Enquanto vc não fizer a lição de casa não vai dá pra suspeitar de qualquer outra coisa…

Meus headers estão corretos.
Tenho certeza disto.
Já os testei com outras coisas, inclusive no sony ericsson.
O que eu preciso é de ajuda. Dificilmente eu abro um tópico em fórum. geralmente eu acho o que preciso na internet. Estou há dois meses lendo coisas na internet e tentando resolver este problema. Pedi ajuda. Você vem me falar de lição de casa?
Obrigado pela sua ajuda, meu amigo.
Espero que alguém com um pouco mais de força de vontade me responda, ou já digo de ante mão: Prefiro ficar sem resposta.

Att,

McLuck

[quote=McLuck]Meus headers estão corretos.
Tenho certeza disto.
Já os testei com outras coisas, inclusive no sony ericsson.
[/quote]
Por isto eu disse lição de casa. Só agora finalmente vc confirma que checou o básico. Vc não havia falado sobre isto em nenhum post anterior…quer q eu adivinhe q vc checou o óbvio ? Muitos não checam, ok ?!

Bem, se os headers estão certos e o celular não processa adequadamente, então só resta estas hipóteses altamente improváveis:

  • Problema no firmware do celular (algum bug)
  • O celular definitivamente não suporta Java (o que é difícel nos dias de hoje para aparelhos comercializados no país)

[quote=McLuck]

  • Testei deixar ele no server como link apenas (não é o que quero, mas se funcionasse deixaria assim até achar uma solução de verdade);
    McLuck[/quote]

Olá, desculpe não sei responder sua pergunta, mas por que deixar um link para baixar não seria elegante? Fiz um aplicação que dispobilizei em um site, onde o cadastro eh obrigatório para acessar o link, no caso a instrução é de que o usuário baixe no desktop, descompacte o arquivo (nele ja estarão o jar e jad dentro de uma pasta), copie a pasta para o mobile. Esta tudo errado?

McLuck .
Já tive esse mesmo problema.
No meu caso, era que no celular em questão tinha uma opção para desabilitar sons de aplicativos, por isso não funcionava de jeito nenhum. Foi só alterar essa configuração que funcionou após muitas horas revendo o código inutilmente.

Outra coisa: não adianta verificar só se roda java. Cada celular tem uma lista de mime-type que ele suporta. É preciso checar isso, ou na especificação técnica do celular ou fazendo um programa simples que liste os mime types e rodá-lo no celular.

Abraços

Da forma que eu faco, posso fazer wap-push ou simplesmente enviar um link por sms que o usuario pode baixar com apenas um click e instalar no aparelho dele. Independente se for por wireless ou wap.

Bom… Meu problema continua. Estou num sony ericsson w200i. Funciona perfeitamente se eu instalar com o cabo, mas se eu tento fazer o download via gprs, ele abre nao faz o download do JAD, como era pra ser feito, ao contrario, abre o jad na tela como se fosse um txt. Na tela do celular aparece o conteudo do descritor. Acho que isto ja deu pra entender.

[quote]Já tive esse mesmo problema.
No meu caso, era que no celular em questão tinha uma opção para desabilitar sons de aplicativos, por isso não funcionava de jeito nenhum. Foi só alterar essa configuração que funcionou após muitas horas revendo o código inutilmente.

Outra coisa: não adianta verificar só se roda java. Cada celular tem uma lista de mime-type que ele suporta. É preciso checar isso, ou na especificação técnica do celular ou fazendo um programa simples que liste os mime types e rodá-lo no celular. [/quote]

Vicentino, como poderia saber isto? Me da um conselho ai cara, porque nestas alturas do campeonato(ou da madrugada depois de um dia como hoje, que NAO deveria estar trabalhando mas estou) nao me vem nada em mente. Como fazer para identificar os tipos diferentes de mime? usando o WAP nao deveria ser feito isto automaticamente para mim? Isto e, eu setando apenas meu servidor com os mimes corretos, qualquer celular que acessasse usando WAP nao deveria reconhecer, uma vez que TEM java no celular?
Fico no aguardo de respostas. (PS-Estou revirando todas as configuracoes do aparelho atras destes “sons” que voce mencionou).

Att,

Lucas Israel

Consegui uma solução provisória.
Coloquei um link alternativo. O link original faz o download do JAD e o JAD aponta para o JAR no servidor correto.
No link alternativo, coloquei o link direto do JAR. Acabei de confirmar que todos os celulares que deram problema com o JAD, já estão funcionando com o JAR.

Bom… Esta não é a solução. Quem puder esclarecer como eu faço funcionar todos com o JAD, agradeceria muito.

Att,

Lucas Israel