terça-feira, 11 de março de 2014

Lançamento do Java 8

O lançamento mundial do Java 8 acontecerá no próximo dia 25 às 14 horas, no horário de Brasília, e as inscrições para o Webcast já estão abertas.

Faça sua inscrição no site do evento.

Além da palestra de lançamento ao vivo, estarão disponíveis mais de 35 sessões técnicas e fórum para perguntas.

Se você quiser enviar perguntas para a equipe de arquitetos da Oracle com antecedência, basta usar a hastag #Java8 no twitter.

Fonte: SouJava

quinta-feira, 6 de março de 2014

JAX-RS 2.0 Jersey Client API - #AdoptaJSR #JSR339

Olá pessoal, esse post faz parte do programa Adote uma JSR com GujavaSC e falaremos hoje sobre a JSR 339 mais especificamente sobre nova funcionalidade Client API. Essa funcionalidade é utilizada para acessar recursos web e fornece uma API de mais alto nível que HttpURLConnection.

O artigo irá mostrar um exemplo de como você pode utilizar a nova Client API do JAX-RS 2.0 do Jersey.

Para esse projeto usaremos o JBOSS AS 7.1 Port 8082 com maven (pom está no github), o objetivo será consumir serviços REST e saber lidar com as respostas retornadas por ele.

Então vamos começar!

Essa primeira linha de código irá criar e retornar uma instância do client.
Client orderClient = ClientBuilder.newClient();
O próximo passo é criar um WebTarget (representa um recurso identificado por uma URI), construir um request e submetê-lo utilizando GET. Nesse exemplo estaremos pedindo por um objeto chamado Order identificado pelo id 1.

WebTarget target = orderClient.target("http://localhost:8082/rest-client-api-example/resources/orders/{id}"); Response response = target .resolveTemplate("id",1) .request(MediaType.APPLICATION_JSON) .get();
Para explicar cada passo do que aconteceu no código anterior iremos quebrá-lo em partes, como você pode ver abaixo:

orderClient.target(URI) - Retornará um Webtarget que representa a URI
target.resolveTemplate("id", 1) - Cria uma nova instância de WebTarget e substitui o template pelo valor passado
target.request(MediaType.APPLICATION_JSON) - Cria uma nova instância de WebTarget e começa a construir uma request com os media types aceitos
target.get() - Invoca o método HTTP GET para o request de forma síncrona e retorna uma Response

Uma outra coisa que você pode notar, é que o objeto da classe WebTarget é imutável quando diz respeito a URI e mutável quanto a sua configuração. Não entraremos em detalhes aqui, porém toda vez que utilizarmos métodos que modifiquem a URI um novo objeto será criado, em contrapartida quando a configuração de um WebTarget é modificada, novas instâncias não serão criadas.

Na última linha do código anterior você poderia usar outro método HTTP como post(), put() ou qualquer outro que você escolher. Depois você só tem que verificar se a Response está OK (Código 200) e ler a entidade. Se você está tentando ler uma List isso funcionará um pouco diferente e eu estarei falando sobre isso à seguir.
 
Então se o serviço estiver rodando e tudo está correto, você receberá a instância de Order do servidor e seus dados serão imprimidos no console.
if(response.getStatus() == Status.OK.getStatusCode()){
    Order order = (Order) response.readEntity(Order.class);
 System.out.println("Id: "+order.getId());
 System.out.println("Name: "+order.getName());
 System.out.println("Price: "+order.getPrice());
}else{
 System.out.println(response.getStatus()+ " "+ response.getStatusInfo());
}

Você provavelmente precisará também requisitar ao servidor listas genéricas e para fazer isso será um pouco diferente. No código abaixo você vai criar um WebTarget com uma requisição, assim como foi passado anteriormente, e ao invés de passar um id você pedirá por toda a lista the /orders.

WebTarget target = orderClient.target("http://localhost:8082/rest-client-api-example/resources/orders");
Response response = target .request(MediaType.APPLICATION_JSON) .get();

O retorno é um pouco diferente quando usamos tipos genéricos, você terá que instanciar uma sub-classe anônima de GenericType passando List que é o que você deseja receber. 
List<Order> orders = response.readEntity(new GenericType<List<Order>>() {});

Fazendo isso você receberá uma lista de Order e assim manipular da maneira que você achar melhor.

O exemplo completo está no github do adoptajsr, fique à vontade para fazer utilizar como quiser. Lá você também encontrará o serviço REST e a implementação do cliente.

Participem do programa Adote uma JSR com GujavaSC se inscrevendo na lista do AdoptaJSR. Após se inscrever mande um email se apresentando e pergunte como participar!

Fonte: GujavaSC