# Java SDK调用示例
本文以调用DWS的**查询规格信息（ListNodeTypes）**接口为例，介绍华为云Java SDK的使用方法。
#### 前提条件
- 已获取华为云账号对应的Access Key（AK）和Secret Access Key（SK），具体操作请参见[新增访问密钥](https://support.huaweicloud.com/usermanual-ca/ca_05_0003.html#section1)。
- 运行SDK的环境已安装[JDK 1.8](https://www.oracle.com/java/technologies/downloads/)及以上版本，并已安装和配置[Maven](https://maven.apache.org/download.cgi)环境。
 
#### 安装SDK
推荐通过Maven安装华为云Java SDK，此处以Maven安装方式为例进行介绍。
打开Maven项目的pom.xml文件，在**\<dependencies\>**节点下加入以下依赖配置，Maven会自动下载相关SDK包。
以3.1.219版本的Java SDK为例，最新的SDK版本信息可通过[SDK中心](https://console.huaweicloud.com/apiexplorer/#/sdkcenter?language=Java)查看获取。
- **安装单个云服务SDK包**
  ```
  <dependency> 
      <groupId>com.huaweicloud.sdk</groupId> 
      <artifactId>huaweicloud-sdk-dws</artifactId> 
      <version>3.1.219</version> 
  </dependency>
  ```
  
- **安装云服务集合SDK包**
  ```
  <dependency> 
      <groupId>com.huaweicloud.sdk</groupId> 
      <artifactId>huaweicloud-sdk-all</artifactId> 
      <version>3.1.219</version> 
  </dependency>
  ```
  
- **安装云服务集合SDK Bundle包**
  当出现第三方库冲突时，可以引入如下Bundle包（3.0.40-rc及以上版本），该包包含所有支持的服务和重定向了SDK依赖的第三方软件，避免和业务自身依赖的库产生冲突。
  ```
  <dependency> 
      <groupId>com.huaweicloud.sdk</groupId> 
      <artifactId>huaweicloud-sdk-bundle</artifactId> 
      <version>3.1.219</version> 
  </dependency>
  ```
  
![](https://support.huaweicloud.com/sdkreference-dws/public_sys-resources/caution_3.0-zh-cn.png)
Bundle包已经包含了SDK的Core包和云服务集合包，不需要再单独引入Core包和服务包。根据Maven依赖解析顺序，额外引入Core包和服务包可能会导致Bundle包不生效。
#### 使用SDK
以下是一个完整的Java示例，演示如何使用华为云Java SDK调用**查询规格信息（ListNodeTypes）**接口。
- 如果需要获取其他接口的SDK示例，请参见[获取SDK示例代码](https://support.huaweicloud.com/sdkreference-dws/dws_sdk_0002.html)。
- 本示例中仅提供了基本的接口参数配置说明，更多的进阶配置请参见SDK的[用户手册](https://github.com/huaweicloud/huaweicloud-sdk-java-v3/blob/master/README_CN.md#用户手册-top)。
- 如果把认证用的AK/SK直接写到代码中会有较大的安全风险，建议在配置文件或环境变量中以密文存放AK/SK，使用时解密，确保安全。本示例中把AK和SK保存为环境变量CLOUD_SDK_AK和CLOUD_SDK_SK，具体操作请参见[环境变量](https://github.com/huaweicloud/huaweicloud-sdk-java-v3/blob/master/README_CN.md#251-环境变量-top)。
```
package com.huaweicloud.sdk.test;
import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.dws.v2.region.DwsRegion;
import com.huaweicloud.sdk.dws.v2.*;
import com.huaweicloud.sdk.dws.v2.model.*;
public class ListNodeTypesSolution {
    public static void main(String[] args) { 
        // ==================== 初始化客户端 ==================== 
        // 从环境变量获取AK/SK，运行前需要提前把AK/SK设置为环境变量
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");
        // 配置认证凭证
        ICredential auth = new BasicCredentials()
                .withAk(ak)
                .withSk(sk);
        // 初始化客户端 
        DwsClient client = DwsClient.newBuilder()
                .withCredential(auth)
                .withRegion(DwsRegion.valueOf("af-north-1"))
                .build();
        // ==================== 构造请求对象 ==================== 
        // 使用SDK中提供的Request对象封装请求参数 
        ListNodeTypesRequest request = new ListNodeTypesRequest();
 
        // ==================== 发起请求并处理响应 ==================== 
        // 通过客户端调用对应API发起请求，调用成功将返回Response对象，调用失败将抛出对应异常 
        try {
            ListNodeTypesResponse response = client.listNodeTypes(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}
```
