实现使用 Apache Wink REST 客户机的客户机

您可以使用 Apache Wink REST 客户机来发送请求以及处理来自 RESTful 服务的响应。您可以在 Java™ 程序中使用客户机 API 与 Web service 通信。

关于此任务

缺省情况下,Apache Wink 客户机将来自 Java 运行时环境的 java.net.HttpURLConnection 类用于发布请求和处理响应。Apache Wink 客户机还可以将 Apache HttpClient 4.0 用作底层客户机传输。

您还可以使用 JAX-RS 实体提供程序来帮助序列化请求实体或反序列化响应实体。JAX-RS 服务器端服务中使用的标准 JAX-RS 提供程序是随客户机提供的。

您可以用编程方式配置 Apache Wink REST 客户机或者通过设置 Java 虚拟机 (JVM) 属性来进行配置。

要实施 Apache Wink REST 客户机,您必须首先创建 org.apache.wink.client.ClientConfig 对象,然后将此对象用于构造 org.apache.wink.client.RestClient。您可以用编程方式更改 RestClient 对象的配置设置,或者您可以使用 JVM 属性来修改缺省 ClientConfig 对象值。

要以编程方式配置 RestClient 对象的配置设置,请启动 ClientConfig 对象的公共方法。
注: 在 ClientConfig 对象用于构造 RestClient 对象之后,不再可以修改 ClientConfig 对象。尝试这样操作会生成 org.apache.wink.client.ClientConfigException 错误消息。
或者,您可以使用 JVM 属性来修改缺省 ClientConfig 对象值,从而配置 RestClient 对象的配置设置。使用以下 JVM 属性来修改缺省 ClientConfig 对象值:
wink.client.readTimeout

该属性指定 RestClient 对象将等待请求的响应多久(以毫秒为单位)才会超时。值 0 意味着客户机无限期地等待并且不会超时。

缺省值为 60,000 毫秒。

wink.client.connectTimeout

此属性指定 RestClient 对象在尝试连接至目标资源时等待多久才会超时(以毫秒计)。值 0 意味着客户机无限期地等待并且不会超时。

缺省值为 60,000 毫秒。

通过使用 JVM 属性,您可以用编程方式对您指定的 RestClient 对象变更任何值。编程值优先于任何 JVM 属性值。

过程

  1. 创建 org.apache.wink.client.ClientConfig 对象。
    以下代码片段说明如何创建 org.apache.wink.client.ClientConfig 对象:
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
    .
    如果您将 Apache HTTP 客户机用作底层传输,请转而创建并使用 org.apache.wink.client.ApacheHttpClientConfig 对象。以下代码片段说明如何创建 org.apache.wink.client.ApacheHttpClientConfig 对象:
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ApacheHttpClientConfig();
  2. (可选)修改您要用于 RestClient 对象的缺省 ClientConfig 对象值。
    • 您可以可选地用编程方式修改 RestClient 对象的缺省配置设置。要以编程方式指定 RestClient 对象的配置设置,请启动 ClientConfig 对象的公共方法;例如:
      clientConfig.connectTimeout(30000);
      clientConfig.readTimeout(30000);
    • 如果您在独立的非受管客户机运行时环境中使用 Thin Client for JAX-RS,那么可选择使用 JVM 属性来修改 RestClient 对象的配置设置。在瘦客户机在其下运行的 JVM 上设置定制 JVM 属性。
    • 如果您未将 Thin Client for JAX-RS 用作独立客户机运行时环境,但您要在将用于在应用程序服务器上进行安装的应用程序中使用 RestClient 对象,那么您可选择使用 JVM 属性来修改 RestClient 对象的配置设置。使用管理控制台对 REST 客户机代码设置定制 JVM 属性,该客户机代码将在要在应用程序服务器上安装的应用程序内运行。请参阅 Java 虚拟机定制属性信息以了解关于使用管理控制台来设置这些定制 JVM 属性的详细信息。
  3. (可选)如果您使用定制实体提供程序,请使用客户机配置来添加实体提供程序。
    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. 以客户机配置创建 org.apache.wink.client.RestClient 对象。
    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. 以来自 REST 客户机的 URI 创建 org.apache.wink.client.Resource 对象。
    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. 您可以通过对资源对象调用方法将请求头添加到暂挂请求。
    您能以请求内容用作参数来调用 Java 方法(例如 post())以发送请求。在以下示例中,使用为 text/plain 的内容类型头值以及为 */* 的接受头值来提出 HTTP POST 请求。
    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”);
    不必以字符串对象调用 resource.post("The request body as a string"),您可以使用具有有效 javax.ws.rs.ext.MessageBodyWriter 对象的类(例如,JAXB 注解类、byte[] 或具有定制实体提供程序的定制类)的任何其他对象。
  7. 使用状态码、响应头或响应消息主体来处理响应。
    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));
    不必以 String.class 文件调用 response.getEntity(String.class) 对象,您可以使用具有有效 javax.ws.rs.ext.MessageBodyReader 对象的其他任何类(例如,JAXB 注解类、byte[] 或具有定制实体提供程序的定制类)。
  8. (可选)配置客户机来传输基本认证安全性令牌。 要为客户机配置基本认证,您可以选择自己管理相应 HTTP 头,也可使用所提供的 BasicAuthSecurityHandler 处理程序类。BasicAuthSecurityHandler 类简化 Wink 客户机应用程序中的基本认证的启用。要了解关于使用安全客户机处理程序来执行基本 HTTP 认证的更多信息,请参阅在 Web 容器内保护 JAX-RS 应用程序的信息。

结果

您使用 Apache Wink REST 客户机(可以向 JAX-RS 应用程序发布请求)来实施 JAX-RS 客户机。


指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_impl_client_winkrestclient
文件名:twbs_jaxrs_impl_client_winkrestclient.html