Implementando Clientes que Usam o Cliente Apache Wink REST

É possível usar o cliente Apache Wink REST para enviar pedidos e processar respostas a partir de serviços RESTful. É possível usar a API do cliente em programas Java™ para se comunicar com serviços da Web.

Sobre Esta Tarefa

Por padrão, o cliente Apache Wink usa a classe java.net.HttpURLConnection a partir do ambiente de tempo de execução Java para emitir pedidos e processar respostas. O cliente Apache Wink também pode usar o Apache HttpClient 4.0 como um transporte de cliente subjacente.

Também é possível usar os provedores de entidade JAX-RS para ajudar a serializar as entidades de pedido ou desserializar as entidades de resposta. Os provedores JAX-RS padrão que são usados nos serviços JAX-RS do lado do servidor são fornecidos com o cliente.

É possível configurar o cliente Apache Wink REST programaticamente ou configurando propriedades da Java Virtual Machine (JVM).

Para implementar um cliente Apache Wink REST, você deve primeiro criar um objeto org.apache.wink.client.ClientConfig que será depois usado para construir um org.apache.wink.client.RestClient. É possível mudar as definições da configuração para o objeto RestClient programaticamente, ou é possível usar propriedades JVM para modificar os valores padrão do objeto ClientConfig.

Para configurar as definições de configuração para o objeto RestClient programaticamente, inicie os métodos públicos do objeto ClientConfig.
Nota: Após um objeto ClientConfig ser usado para construir um objeto RestClient, o objeto ClientConfig não pode mais ser modificado. Tentar fazer isso resulta em uma mensagem de erro org.apache.wink.client.ClientConfigException.
Como alternativa, é possível configurar as definições de configuração para o objeto RestClient usando propriedades JVM para modificar os valores padrão do objeto ClientConfig. Use as seguintes propriedades JVM para modificar os valores padrão do objeto ClientConfig:
wink.client.readTimeout

Essa propriedade especifica quanto tempo o objeto RestClient aguarda (em milissegundos) por uma resposta a pedidos antes do limite de tempo. Um valor igual a 0 significa que o cliente espera uma quantia ilimitada de tempo e não atingirá o tempo limite.

O valor padrão é de 60.000 milissegundos.

wink.client.connectTimeout

Essa propriedade especifica quanto tempo o objeto RestClient espera (em milissegundos) antes de atingir o tempo limite ao tentar conectar ao recurso de destino. Um valor igual a 0 significa que o cliente espera uma quantia ilimitada de tempo e não atingirá o tempo limite.

O valor padrão é de 60.000 milissegundos.

É possível alterar programaticamente qualquer valor para o objeto RestClient que você especifica usando propriedades JVM. Os valores programáticos têm precedência sobre quaisquer valores da propriedade JVM.

Procedimento

  1. Crie um objeto org.apache.wink.client.ClientConfig.
    O seguinte fragmento de código ilustra como criar um objeto org.apache.wink.client.ClientConfig:
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
    .
    Se você usar um cliente Apache HTTP como o transporte subjacente, crie e use um objeto org.apache.wink.client.ApacheHttpClientConfig em vez disso. O seguinte fragmento de código ilustra como criar um objeto org.apache.wink.client.ApacheHttpClientConfig:
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ApacheHttpClientConfig();
  2. (opcional) Modifique os valores padrão do objeto ClientConfig que deseja usar para o objeto RestClient.
    • Opcionalmente, é possível modificar as definições da configuração para o objeto RestClient programaticamente. Para especificar as definições de configuração para o objeto RestClient programaticamente, inicie os métodos públicos do objeto ClientConfig; por exemplo:
      clientConfig.connectTimeout(30000);
      clientConfig.readTimeout(30000);
    • Se estiver usando o Thin Client para JAX-RS em um ambiente de tempo de execução de cliente não gerenciado independente, como opção, é possível modificar as definições de configuração para o objeto RestClient usando propriedades JVM. Configure as propriedades JVM customizadas no JVM sob as quais o thin client está executando.
    • Se não estiver usando o Thin Client para JAX-RS como um ambiente de tempo de execução de cliente independente, mas estiver usando o objeto RestClient em um aplicativo que é destinado para a instalação no servidor de aplicativos, como opção, é possível modificar as definições de configuração para o objeto RestClient usando propriedades JVM. Configure as propriedades JVM customizadas usando o console administrativo para o seu código do cliente REST que está em execução dentro de um aplicativo que está instalado no servidor de aplicativos. Consulte as informações das propriedades customizadas da Java virtual machine para obter detalhes sobre o uso do console administrativo para definir essas propriedades JVM customizadas.
  3. (opcional) Se você usar um provedor de entidade customizado, inclua o provedor de entidade usando a configuração do cliente.
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
    
    javax.ws.rs.core.Application app = new javax.ws.rs.core.Application() {
           public Set<Class<?>> getClasses() {
               Set<Class<?>> classes = new HashSet<Class<?>>();
               classes.add(MyCustomEntityProvider.class);
               return classes;
           }
    };
    clientConfig.applications(app);
  4. Crie um objeto org.apache.wink.client.RestClient com a configuração do cliente.
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
    
    javax.ws.rs.core.Application app = new javax.ws.rs.core.Application() {
           public Set<Class<?>> getClasses() {
               Set<Class<?>> classes = new HashSet<Class<?>>();
               classes.add(MyCustomEntityProvider.class);
               return classes;
           }
    };
    clientConfig.applications(app);
    
    org.apache.wink.client.RestClient client = new org.apache.wink.client.RestClient(clientConfig);
  5. Crie um objeto org.apache.wink.client.Resource com um URI a partir do cliente REST.
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
    
    javax.ws.rs.core.Application app = new javax.ws.rs.core.Application() {
           public Set<Class<?>> getClasses() {
               Set<Class<?>> classes = new HashSet<Class<?>>();
               classes.add(MyCustomEntityProvider.class);
               return classes;
           }
    };
    clientConfig.applications(app);
    
    org.apache.wink.client.RestClient client = new org.apache.wink.client.RestClient(clientConfig);
    
    org.apache.wink.client.Resource resource = client.resource(“http://www.example.com/rest/api/book/123”);
  6. É possível incluir cabeçalhos de pedido no pedido pendente ao chamar métodos no objeto Resource.
    É possível chamar um método Java como post() com o conteúdo de pedido como um parâmetro para enviar o pedido. No seguinte exemplo, um pedido POST HTTP é feito com o valor do cabeçalho Tipo de Conteúdo text/plain e o valor de cabeçalho Aceitar */*.
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
    
    javax.ws.rs.core.Application app = new javax.ws.rs.core.Application() {
           public Set<Class<?>> getClasses() {
               Set<Class<?>> classes = new HashSet<Class<?>>();
               classes.add(MyCustomEntityProvider.class);
               return classes;
           }
    };
    clientConfig.applications(app);
    
    org.apache.wink.client.RestClient client = new org.apache.wink.client.RestClient(clientConfig);
    
    org.apache.wink.client.Resource resource = client.resource(“http://www.example.com/rest/api/book/123”);
    
    ClientResponse response = resource.contentType(“text/plain”).accept(“*/*”).post(“The request body as a string”);
    Em vez de chamar resource.post("The request body as a string") com um objeto String, é possível usar qualquer outro objeto que possua uma classe com um objeto javax.ws.rs.ext.MessageBodyWriter válido, como uma classe JAXB anotada, um byte[] ou uma classe customizada que possua um provedor de entidade customizado.
  7. Processe a resposta usando o código de status, cabeçalhos de resposta ou o corpo de mensagem de resposta.
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
    
    javax.ws.rs.core.Application app = new javax.ws.rs.core.Application() {
           public Set<Class<?>> getClasses() {
               Set<Class<?>> classes = new HashSet<Class<?>>();
               classes.add(MyCustomEntityProvider.class);
               return classes;
           }
    };
    clientConfig.applications(app);
    
    org.apache.wink.client.RestClient client = new org.apache.wink.client.RestClient(clientConfig);
    
    org.apache.wink.client.Resource resource = client.resource(“http://www.example.com/rest/api/book/123”);
    
    ClientResponse response = resource.contentType(“text/plain”).accept(“*/*”).post(“The request body as a string”);
        
    System.out.println(“The response code is: “ + response.getStatusCode());
    System.out.println(“The response message body is: “ + response.getEntity(String.class));
    Em vez de chamar o objeto response.getEntity(String.class) com o arquivo String.class, é possível usar qualquer outra classe que possua um objeto javax.ws.rs.ext.MessageBodyReader válido, como uma classe JAXB anotada, um byte[] ou uma classe customizada que possua um provedor de entidade customizado.
  8. (opcional) Configure o cliente para transmitir tokens de segurança de autenticação básica. Para configurar a autenticação básica para seu cliente, é possível optar por gerenciar os cabeçalhos HTTP apropriados ou é possível usar a classe manipuladora BasicAuthSecurityHandler fornecida. A classe BasicAuthSecurityHandler simplifica a ativação de autenticação básica no aplicativo cliente do Wink. Para saber mais sobre o uso do manipulador de cliente de segurança para executar autenticação HTTP básica, consulte os aplicativos JAX-RS de segurança dentro das informações do contêiner da Web.

Resultados

Você implementou um cliente JAX-RS usando o cliente Apache Wink REST que pode emitir pedidos para um aplicativo JAX-RS.


Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_impl_client_winkrestclient
Nome do arquivo: twbs_jaxrs_impl_client_winkrestclient.html