Depois de fazer funcionar o VRaptor usando HttpConnection http://www.guj.com.br/posts/list/214608.java, estou enfrentando uma dificuldade que com certeza deve ser ou uma ebsteira ou então novamente um erro na implementação do VRaptor.
@Path("/service/metodo")
public void metodo() {
String msg = "Message";
ByteArrayInputStream ba = new ByteArrayInputStream(msg.getBytes());
// Tanto usando desta forma
result.use(Results.http()).addHeader("Content-Type", "text/plain");
result.use(Results.http()).addIntHeader("Content-Length", 1000);
// Quanto usando o response injetado pelo construtor (HttpServletResponse)
// response.setContentType("Contetext/plain");
//response.setHeader("Content-Length", Long.toString(ba.available()));
result.use(Results.nothing());
Usando qualquer browser (I.E., Firefox, Chrome, etc…), normalmente recebo as seguintes informações no response:
Response Headers Value
(Status-Line) HTTP/1.0 200 OK
Expires Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie JSESSIONID=PLe0ItKeRvRuBTxqf4agmw;Path=/
Content-Type text/html
Content-Encoding gzip
Date Mon, 09 Aug 2010 16:14:06 GMT
Server Google Frontend
Cache-Control private, x-gzip-ok="" Content-Length 130
X-Cache MISS from local firewall
X-Cache-Lookup MISS from local firewall
Via 1.0 local firewall (squid/2.6.STABLE18)
Connection keep-alive
Agora chamando este mesmo método usando HttpConnection (J2ME), não recebo o atributo Content-Length, mesmo setando no código, como mostra acima a implementação.
Response Headers Value
(Status-Line) HTTP/1.0 200 OK
Expires Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie JSESSIONID=aLipUInJd77qzHt8yp5UMA;Path=/
Content-Type text/html
Date Mon, 09 Aug 2010 16:09:45 GMT
Server Google Frontend
Cache-Control private, x-gzip-ok=""
X-Cache MISS from local firewall
X-Cache-Lookup MISS from local firewall
Via 1.0 local firewall
Connection close
Só para não confundir!
O tamando do Content-length mostrado (130) é baseado na mensagem original enviada e não da palavra usado no códgo de exemplo “Mensagem”
Oi Lucas, é que na verdade para que eu consiga adicionar o accept, teria que mexer em uma lib J2ME que muitos outros sistemas usam. Não sei o impacto que teria nisso. Então risco por risco preferi usar a versão 3.1.0 do VRaptor.
Sobre a tua pergunta sobre o valor 1000, meu exemplo foi infeliz. O correto seria:
String msg = "Message";
ByteArrayInputStream ba = new ByteArrayInputStream(msg.getBytes());
// Nenhum funciona. Nem este
//response.setHeader("Content-Length", Long.toString(ba.available()));
// nem este
response.setContentLength(String.valueOf(ba.available()));
response.setContentType("text/plain");
or
String msg = "Message";
ByteArrayInputStream ba = new ByteArrayInputStream(msg.getBytes());
result.use(Results.http()).addHeader("Content-Type", "text/plain");
result.use(Results.http()).addIntHeader("Content-Length", Long.valueOf(ba.available()).intValue());
A dificuldade é que simplesmente usando HttpConnection o atributo Content-Length não vai no response!
Dependo apenas desta informação (Content-length) para que a parte J2ME identifique que existe algum conteúdo e consiga a ler.
Tinha feito já aqui já alguns testes chamando aplicações que conheço no GAE e realmente este atributo usando uma HttpConnection, também não era setado.
Você usou HttpConnection, algo similar ou usou um browser normalmente?
Justamente, dei uma olhada nesta issue também, ontem a noite!
Contudo, enviei um e-mail para um dos onwers do grupo, pois o grupo não é aberto, sendo necessária a aprovação de algum dos owners para posts.
Vamos ver se ele nos responde. Mantenho a thread atualizada em caso positivo.
Há uma séries de coisas que vejo no GAE que é de se entender por ser um ambiente em cluster. Todas as limitações deles são bem aceitáveis, exceto algumas poucas como essa aí. Não vejo razão alguma para impedir de que seja “setado” manualmente o content-length. Sem ele o browser não exibe o tempo de download.
Um workaround seria setar uma propriedade no response ( response.setIntHeader(“Content_Length_GAE”, mensagem.getBytes.length) ) e manipular isso em quem vai receber, no meu caso no lado do mobile!
Não obtive resposta nenhuma do contato que informei acima.