Vraptor - Problemas com request type = "OPTIONS"

Caros,

Estou com o seguinte problema:

Estou trabalhando em uma aplicação que precisa liberar acesso Cross-Domain em alguns metodos para que outra aplicação consiga usar.
Já tentei colocar response.setHeader("Access-Control-Allow-Origin", "*") , mas não funcionou.

Pelo que vi o browser está tentando fazer essa chamada passando o type do request como “OPTIONS” e não como GET.

O ajax que está chamando minha aplicação está assim:

$.ajax({
 type: "GET",
url: "url da aplicação/metodo da minha aplicação",
data:{data},
success: function(data){
 algumacoisa();
}
});

Porém no browser, está setando o type do request para OPTIONS como eu falei antes, pesquisando no google vi que é um comportamento padrão por estar tentando fazer uma chamada cross-domain.

Se pegar a url que o ajax está chamando e acessar direto no browser o meu controller recebe sem nenhum problema.

Então fui ver se encontrava alguma coisa aqui e nada, estou usando a versão 3.3.1 do vraptor no projeto, e no changelog (http://vraptor.caelum.com.br/pt/docs/changelog-pt/) está informando que o vraptor tem suporte a esse tipo de requisição desde a versão 3.2.0. mas no meu projeto quando a chamada vem dessa forma não chega nem a entrar no metodo do Controller, e também não apresenta nenhum erro no log.

Alguém tem idéia do que poderia estar acontecendo?
Precisam de mais alguma informação?

Grato desde já pela atenção.

O método do seu @Resource está anotado com @Options?

Esqueci de falar, apesar da versão estar como 3.3.1, quando eu tento usar essa anotação da pau, não encontra a referencia para importar essa anotação.

Se eu usar essa marcação, ainda consigo fazer chamada via GET nesse metodo?

Cara, eu acredito que não. Acho que um método de um @Resource não pode ser anotado com dois verbos http, mas quem pode afirmar com certeza é o Lucas Cavalcanti. Mas qualquer coisa, vc pode criar dois métodos, um anotado com @Get e o outro com @Options, e como eles fazem a mesma coisa, delegariam para um método privado de apoio.

dá pra anotar com duas anotações de método sim…

mas o header de Access-Control-Allow-Origin precisa ser respondido na requisição OPTIONS mesmo, se eu não me engano, daí o browser faz outra requisição, dessa vez GET.

Ao invés disso vc pode usar JSONP, que é a outra solução pra cross-domain ajax.

O problema é que não estou conseguindo usar a anotação @Options, não encontra a classe para importar.

Como posso ter certeza de qual a versão do vraptor que estou usando? A biblioteca que está no projeto está com o nome vraptor-3.3.1.jar

então vc tá nessa versão, 3.3.1… se possível migre pra 3.4.1, pois ela possui a @Options.

O suporte a este tipo de request não foi adicionado na 3.2.0?

teoricamente sim… vc baixou esse jar do vraptor de onde?

Do próprio site do vraptor, era a última versão disponivel quando o projeto teve início, desde então não fizemos atualização no vraptor.

Lucas,

A anotação @Options não foi adicionada pelo Douglas nesse pullrequest? https://github.com/caelum/vraptor/commit/ad1e326403642abc76244484b742674e31665cb1

Acho que não foi lançada nenhuma versão do vraptor após esse pullrequest.

Verdade… quer que eu gere um snapshot com isso, shinrox?

se quiser testar:

https://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.5.0-SNAPSHOT/vraptor-3.5.0-20130325.014756-1.jar

se quiser receber pelo maven, registre o snapshot repository:
https://oss.sonatype.org/content/repositories/snapshots

e coloque a versão 3.5.0-SNAPSHOT no artefato do VRaptor.

Se houver qualquer problema dá um toque

Opa,

@Lucas

Desculpa pela demora em dar um retorno, o pessoal aqui acabou resolvendo o problema, não sei ao certo o que fizeram mas implementaram o suporte a requisições OPTIONS no vraptor, vou pedir para que eles verifiquem a solução que você passou.

Obrigado pelas respostas.