Boa Noite.
Estou estudando JAX-WS e estou com um problema, consigo consumir um Rest de outra aplicação, fiz uma classe java de teste em outro projeto e funcionou, mas ao tentar consumir o mesmo por JQuery obtive o seguinte erro de crossdmain, pesquisei em como habilitar no java, tentei varias soluções e nada.......
cheguei a ver a interface "ContainerResponseFilter" e nada, ao implementar a mesma obtive o mesmo retorno:
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
@Override
public void filter(ContainerRequestContext request, ContainerResponseContext response) throws IOException {
response.getHeaders().add("Access-Control-Allow-Origin", "*");
response.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
response.getHeaders().add("Access-Control-Allow-Credentials", "true");
response.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
response.getHeaders().add("Access-Control-Max-Age", "1209600");
}
tambem tentei alterar o jquery para usar JSONP, mas não obtive sucesso....
estrnhamente com jsonp o console do navegador exibe o erro "Uncaught SyntaxError: Unexpected token :", mas ao clicar no link para me enviar a linha de erro ele me exibe o json montado, assim como nos meus testes em java:
{"lista_produtos":[{"preco":4000.0,"id":6237,"nome":"Videogame 4","quantidade":1},{"preco":60.0,"id":3467,"nome":"Jogo de esporte","quantidade":2}],"rua":"Rua Vergueiro 3185, 8 andar","cidade":"Sao Paulo","id":1}
formatado:
{
"lista_produtos": [{
"preco": 4000.0,
"id": 6237,
"nome": "Videogame 4",
"quantidade": 1
}, {
"preco": 60.0,
"id": 3467,
"nome": "Jogo de esporte",
"quantidade": 2
}],
"rua": "Rua Vergueiro 3185, 8 andar",
"cidade": "Sao Paulo",
"id": 1
}
codigo jquery:
$(document).ready(function() {
$.ajax({
url: "http://localhost:8080/TesteRest/ws/carrinhos/1",
dataType: 'jsonp',
crossDomain: true,
type: 'GET'
}).then(function(data) {
var atributos = {id: 'minhaDiv',class: 'minhaClasse',html: "data"};
$('<li>', atributos).appendTo('#corpo');
});
});
codigo rest:
@Path("{id}")
@GET
@Produces({MediaType.APPLICATION_JSON, "application/json", "application/javascript"})
public String busca(@PathParam("id") Long id){
String ret = "";
List<Carrinho> listaBanco = null;
if(id==0){
Gson json = new Gson();
listaBanco = new CarrinhoDAO().getListaBanco();
ret = json.toJson(listaBanco);
}else{
Carrinho carrinho = new CarrinhoDAO().busca(id);
ret = carrinho.toJson();
}
return ret;
}
gostaria de saber se tem algum detalhe q perdi em minha busca, ou onde eu errei......
se possível gostaria de saber fazer de ambas as formas, pesquisei mas nada q achei funcionou.....