Olá pessoal…
Estou montando uma estrutura genérica aqui envolvendo a arquitetura RESTful com a API do Jersey (cliente e servidor) e um dos métodos que tenho retorna uma lista (List). Porém para conseguir pegar esta lista no lado do cliente eu preciso de um GenericEntity<List> e preciso informar este tipo explícito (tal como GenericEntity<List>, por exemplo) pois este tipo deve ser conhecido em tempo de compilação. Como posso achar uma solução para isso?
Detalhe: Eu possuo o class deste “Produto”, por isso consigo retornar tipos T (pois para a operação REST ser feita eu passo este clazz como tipo de retorno). Vou explicar melhor com um trecho de código (atenção para a linha 13):
[code] public E invokeAdd(String methIdent, E bean) {
ClientResponse cr = null;
try {
cr = wsClient.ws(clazz.getSimpleName())
.path(methIdent)
.header(TOKEN_KEY, TOKEN_VALUE)
.type(MediaType.APPLICATION_JSON)
.post(ClientResponse.class, bean);
return cr.getEntity((Class<E>)clazz); // esta clazz é uma variável de instância que é a class do "E" que estou retornando
}catch (Exception e) {
throw buildClientException(e, cr);
}
}[/code]
Porém para retorno de listas é um pouco diferente:
[code] public List invokeList(String methIdent, E bean, Object… urlParams) {
ClientResponse cr = null;
try {
WebResource wr = buildWebResource(methIdent, urlParams);
cr = wr.header(TOKEN_KEY, TOKEN_VALUE)
.type(MediaType.APPLICATION_JSON)
.put(ClientResponse.class, bean);
// o problema está aqui pois o GenericType não sabe de que tipo se trata
return cr.getEntity(new GenericType<List<E>>() {});
}catch (Exception e) {
throw buildClientException(e, cr);
}
}[/code]
Ou seja, se eu fizesse algo do tipo:
return (List<E>) cr.getEntity(new GenericType<List<Produto>> () {});
retornaria normalmente pois o GenericType conhece o tipo certo desta lista, porém obviamente só serve para List… Alguém teria alguma dica do que poderia ser feito neste caso? Senão terei que ou passar este GenericType por parâmetro (que no meu caso não seria bom), ou estruturar explicitamente a conversão de JSON para List e vice-versa (implementando MessageBodyReader/Writer)…
Qualquer dica é válida…
