VRaptor+ Google App Engine + HttpConnection

15 respostas
G

Fala pessoal!

Seguinte, recorro a vocês para um erro estranho que está ocorrendo.
Estou usando VRaptor3 + Google App Engine.

Então tenho a aplicação rodando normalmente no google, porém quando tento acessa-la via HttpConnection (acesso um metodo que me retorna uma String) estou recebendo error 404. Usando a mesma URL via browser acesso normalmente! Realizei este teste com inúmeras outras URL’s que não usam VRaptor e não tive este problema entre outros sites que usam VRaptor testei o site da Caelum e tenho o mesmo problema (404) quando testo via HtttpConnection.

Detalhes levantados.
Analisando o Response retornado dos testes, mesmo não informando charset algun sempre é colocado um charset default(ISO88-59-1) para sites que usam VRaptor. Isso pode realmente resultar em um erro 404?

Na verdade preciso receber no content-type apenas comom “text/html” sem chartset definido, mas analisando o header de sites que usam VRaptor sempre é retornado um charset, mesmo que não definido.

o método hoje aceita @Get e @Post, pois não descrimei nada apenas o @Path.
Já no meu JSP para este método tenho apenas o seguinte:

<%@ page isELIgnored="false" %>${message}

No web.xml, tenho apenas as configurações padrões

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>App Name</display-name>
	
	<!-- VRpator -->
	<context-param>
		<param-name>br.com.caelum.vraptor.packages</param-name>
		<param-value>br.com.caelum.vraptor.gae</param-value>
	</context-param>

	<filter>
		<filter-name>vraptor</filter-name>
		<filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>vraptor</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>REQUEST</dispatcher>
	</filter-mapping>

	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>
</web-app>

Lembrando via browser, inclusive usando celular via browser, consigo acessar normalmente.

O VRaptor pode realmente estar causando isso?
Esqueci de algo importante?
Alguma dica de como resolver?

Desde já agraço.

15 Respostas

Lucas_Cavalcanti

Vc está usando a url completa no httpconnection?

tipo http://suappnogoogle.com/caminho/do/metodo ?
e a mesma url completa no browser funciona?

pode me mandar por favor o código do HttpConnection que vc usou pra acessar o site da caelum?

é estranho dar 404 só por causa do VRaptor… vou investigar

G

Lucas, após o post testei novamente e o site da Caelum retornou 200, ok em alguns casos!
Creio que minha afirmação tenha caido por água abaixo sobre o site da Caelum e também sobre o VRaptor em si.

Novos dados.
Testei uma outra aplicação (mais antiga) criada no Google App Engine usando VRaptor e consegui acesso via HttpConnection normalmente (200,ok). Vou chamar ela aqui de aplicação VELHA.

Agora estou avaliando as versões das bibliotecas usada nesta aplicação velha que responde normalmente ao HttpConnection com está aplicação que ocorre o erro 404 apenas via HttpConnection.

Acabo de fazer o seguinte teste também! Baixei o projeto blank-project do site do VRaptor e sobrescrevi a aplicação que não respondia ao HttpConnection e via HttpConnection obtive o mesmo erro (404).

Assim que tiver uma dica/resposta/luz divina aviso aos senhores.

Segue o código para acesso via HttpConnection.
Respondendo a sua pergunta, testei a URL da index do site e me retorna o mesmo erro, aparentemente toda e qualquer URL para esta aplicação via HttpConnection me retorna 404.

HttpConnection connection = (HttpConnection) Connector.open("http://myappid.appspot.com/");

connection.setRequestMethod(HttpConnection.GET);

int responseCode = connection.getResponseCode();
String responseMessage = connection.getResponseMessage();
String contentType = connection.getHeaderField("Content-type");
System.out.println("responseCode: " + responseCode);
System.out.println("responseMessage: " + responseMessage);
System.out.println("content-type: " + contentType);

connection.close();
G

Só para não haver confusão, fiz o teste com o projeto blank-project-gae e não só apenas blank-project.

Lucas_Cavalcanti

da onde são as classes HttpConnection e Connector?

Lucas_Cavalcanti

se vc usa HttpClient (http://hc.apache.org/httpcomponents-client-4.0.1/httpclient/index.html) testa com o seguinte:

HttpClient client = new HttpClient();

Method get = new GetMethod("http://myappid.appspot.com/");
int status = client.execute(get);

System.out.println(status);

e veja o que acontece

G

Na verdade é usado JavaME, então só temos HttpConnection.

Lucas_Cavalcanti

qual é o import que vc faz desse httpconnection?

G
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
Paulo_Silveira

bastante estranho.

mas eu tenho uma suspeita sim: pode ser o content negotiation do connection do seu celular. isso é, ele deve estar mandando que só aceita text por exemplo, e ai o vraptor esta esperando voce pedir html, e te retorna 404.

voce pode passar pra gente o header da requisicao que esse seu celular faz direitinho? ai verificamos aqui.

qual é a versao exata do vraptor que voce esta usando?

G

Versão: vraptor-3.1.3

Na verdade no header não tem muita coisa, mas segue o request e o response em anexo.




G

Logs do App Engine, talvez para vocês seja util.

Usando o browser, por exemplo IE:

08-06 11:32AM 54.712 / 200 104ms 150cpu_ms 0kb Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.125 Safari/533.4,gzip(gfe)
- - [06/Aug/2010:11:32:54 -0700] “GET / HTTP/1.1” 200 272 - “Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.125 Safari/533.4,gzip(gfe)” “MYAPPID.appspot.com” ms=105 cpu_ms=150 api_cpu_ms=0 cpm_usd=0.004251

Agora usando HttpConnection (Testei tanto via emulador / quanto via aparelho fisico usando a rede a operadora):

08-06 11:29AM 33.112 / 404 140ms 200cpu_ms 0kb gzip(gfe)
- - [06/Aug/2010:11:29:33 -0700] “GET / HTTP/1.1” 404 279 - “gzip(gfe)” “MYAPPID.appspot.com” ms=140 cpu_ms=201 api_cpu_ms=0 cpm_usd=0.005632

G

Pessoal usando a versão do VRaptor 3.1.0 http://code.google.com/p/vraptor3/downloads/detail?name=vraptor-blank-project-gae-3.1.0.zip&can=2&q=

consegui finalmente fazer com que o HttpConnection receba como resposta o código 200 e não mais 404.

Lucas_Cavalcanti

Muito obrigado gelias,

vamos investigar agora o que foi mudado que fez o VRaptor parar de funcionar totalmente no GAE

só antes de começar a usar com o 3.1.0, por favor volte para o 3.1.3, e adicione o seguinte header na requisição (via HttpConnector):

Accept: /

Acho que isso vai resolver o problema, mas vamos corrigir esse bug de qualquer maneira.

G

Lucas,

Usando o parametro Accept funcionou também!
Agora uma outra dúvida!

no content-type recebido, está descriminado “text/html charset=ISO8859-1”, mas não estou setando nada pois quero receber apenas uma string, então preciso receber apenas “text/html”.

Na jsp não tenho declarado nada, como postei acima sobre charset, creio que por default ele atribua ISO8859-1.

Alguma dica aqui para apenas receber no content-type “text/html” sem charset definido?

Lucas_Cavalcanti

sim, o default é ISO-8859-1… e a declaração do charset é geralmente mimetype; charset mesmo… vc quer mudar o charset ou que ele não envie?

Criado 6 de agosto de 2010
Ultima resposta 6 de ago. de 2010
Respostas 15
Participantes 3