2.2 Java
2.2.2 Java SDK 使用
} else {
System.out.println("no server exists.");
} } }
表2-1 参数说明
名称 说明 取值样例
authUrl 认证服务(IAM)的 Endpoint。
“https://iam.example.com/
v3”中的“example”为“区 域.云平台域名”,参数详情可 以访问这里了解。
https://iam.cn-north-1.myhuaweicloud.com/v3
user IAM用户名。如何获取,请参
考如何获取IAM 用户名、账号 ID以及项目ID?。
-password IAM用户密码。
-projectId 项目ID。如何获取,请参考如 何获取IAM 用户名、账号ID以 及项目ID?。
-userDomai
nId 账号ID。如何获取,请参考如
何获取IAM 用户名、账号ID以 及项目ID?。
-2.2.2 Java SDK 使用
2.2.2.1 安装 Java SDK
Java SDK提供“导入Java SDK JAR文件”、“添加Maven依赖”和“从华为云镜像站 下载”三种安装方式。
方式一:导入Java SDK JAR文件的方式,如下:
请从GitHub 上下载JAR文件,并在集成开发环境(IDE)中导入。
https://github.com/huaweicloud/huaweicloud-sdk-release/tree/master/java-sdk
以Eclipse为例,创建Java工程后,执行以下步骤,导入JAR文件到新建的工程中:
1. 将下载的JAR文件复制到工程文件夹中。
2. 在Eclipse中打开工程,右键单击该项工程,选择Properties。
3. 在弹出的对话框中,单击Java Build Path,然后在Libraries页签下单击Add JARs,添加下载的JAR文件。
4. 单击OK。
方式二:添加Maven依赖的方式,如下:
通过在pom.xml文件中添加以下依赖安装Java SDK。
<dependency>
<groupId>com.huawei</groupId>
<artifactId>openstack4j</artifactId>
<version>1.0.12</version>
</dependency>
Java SDK支持的最新版本,请在这儿查询。
方式三:从华为云镜像站下载的方式,如下:
1. 找到本地maven的全局配置文件(settings.xml),该文件通常位于maven安装目 录的conf下,例如windows系统中:D:\maven\apache-maven-3.3.9\conf
\settings.xml
2. 在settings.xml找到mirror节点,在mirror节点中增加:
<mirror>
<id>huaweicloud</id>
<mirrorOf>*,!HuaweiCloudSDK</mirrorOf>
<url>https://repo.huaweicloud.com/repository/maven/</url>
</mirror>
3. 打开Maven工程的pom.xml,在“<dependency>”节点中加入以下配置:
<dependency>
<groupId>com.huawei</groupId>
<artifactId>openstack4j</artifactId>
<version>1.0.12</version>
</dependency>
Java SDK支持的最新版本,请在这儿查询。
2.2.2.2 Java SDK 认证方式
Java SDK支持两种认证方式:token认证和AK/SK认证。
token 认证
token认证方式示例代码,参数详情请参考表2-2。
package demo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.huawei.openstack4j.openstack.OSFactory;
import com.huawei.openstack4j.api.OSClient.OSClientV3;
import com.huawei.openstack4j.core.transport.Config;
import com.huawei.openstack4j.model.common.Identifier;
import com.huawei.openstack4j.model.compute.Server;
public class Demo {
public static void main(String[] args) { //设置认证参数
String authUrl = "https://iam.example.com/v3";//endpointUrl String user = "replace-with-your-username";//用户名 String password = "replace-with-your-password";//用户密码 String projectId = "replace-with-your-projectId";//项目ID String userDomainId = "replace-with-your-domainId";//账号ID //初始化client
OSClientV3 os = OSFactory.builderV3() .endpoint(authUrl)
.credentials(user, password, Identifier.byId(userDomainId)) .scopeToProject(Identifier.byId(projectId)).authenticate();
//设置查询参数
Map<String, String> filter = new HashMap<String, String>();
//将需要输入的参数都放入filter里面 filter.put("limit", "3");
//调用查询虚拟机列表的接口
List<? extends Server> serverList = os.compute().servers().list(filter);
if (serverList.size() > 0) {
System.out.println("get serverList success, size = " + serverList.size());
for (Server server : serverList) { System.out.println(server);
} } else {
System.out.println("no server exists.");
} } }
表2-2 参数说明
名称 说明 取值样例
authUrl 认证服务(IAM)的 Endpoint。
“https://iam.example.com/
v3”中的“example”为“区 域.云平台域名”,参数详情可 以访问这里了解。
https://iam.cn-north-1.myhuaweicloud.com/v3
user IAM用户名。如何获取,请参
考如何获取IAM 用户名、账号 ID以及项目ID?。
-password IAM用户密码。
-projectId 项目ID。如何获取,请参考如 何获取IAM 用户名、账号ID以 及项目ID?。
-名称 说明 取值样例 userDomai
nId 账号ID。如何获取,请参考如
何获取IAM 用户名、账号ID以 及项目ID?。
-token具有24小时有效期,如果您的程序运行时间超过24小时,在使用SDK调用API之 前,建议您在程序中重新申请一次token,方法如下:
import com.huawei.openstack4j.openstack.OSFactory;
OSFactory.refreshToken();
AK/SK 认证
AK/SK认证方式示例代码,参数详情请参考表2-3。
package demo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.huawei.openstack4j.api.OSClient.OSClientAKSK;
import com.huawei.openstack4j.core.transport.Config;
import com.huawei.openstack4j.model.compute.Server;
import com.huawei.openstack4j.openstack.OSFactory;
public class Demo {
public static void main(String[] args) { // 设置认证参数
String ak = "replace-your-ak";
String sk = "replace-your-sk";
String projectId = "replace-your-projectId";
String region = "replace-your-region"; //example: region = "cn-north-1"
String cloud = "myhuaweicloud.com";
OSClientAKSK osclient = OSFactory.builderAKSK().credentials(ak, sk, region, projectId, cloud) .authenticate();
// 设置查询参数
Map<String , String> filter = new HashMap<String, String>();
// 将需要输入的参数都放入filter里面 filter.put("limit", "3");
// 调用查询虚拟机列表的接口
List<? extends Server> serverList = osclient.compute().servers().list(filter);
if(serverList.size() > 0)
{ System.out.println("get serverList success, size = " + serverList.size());
for (Server server : serverList) { System.out.println(server);
} } else {
System.out.println("no server exists.");
} } }
表2-3 参数说明
名称 说明 取值样例
ak/sk AK/SK访问密钥。
说明
● AK/SK生成说明:登录控制 台,进入“我的凭证”,点击
“管理访问密钥”创建 AK/SK。
● AK/SK签名时间与UTC时间误 差不可以超过15分钟,否则会 鉴权失败。
● AK/SK签名连续失败超过5次,
将锁定对应访问的源IP的 AK/SK请求,持续5分钟。
-projectId 项目ID。如何获取项目ID请参 考如何获取IAM 用户名、账号 ID以及项目ID?。
-region 区域名称。 cn-north-1
cloud 云平台域名。 myhuaweicloud.com
2.2.2.3 Java SDK 服务地址设置
使用SDK调用云服务API时,需要获取每个云服务的地址(Endpoint)。
Java SDK支持两种方式:SDK自动获取、手工编码设置。
编码设置云服务Endpoint的示例如下:
endpointResolver.addOverrideEndpoint(ServiceType.CLOUD_EYE, "https://ces.xxx.yyy.com/V1.0/%
(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.DNS, "https://dns.yyy.com");
endpointResolver.addOverrideEndpoint(ServiceType.CDN, "https://cdn.yyy.com/v1.0");
endpointResolver.addOverrideEndpoint(ServiceType.COMPUTE, "https://ecs.xxx.yyy.com/v2/%(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.NETWORK, "https://vpc.xxx.yyy.com");
endpointResolver.addOverrideEndpoint(ServiceType.IMAGE, "https://ims.xxx.yyy.com");
endpointResolver.addOverrideEndpoint(ServiceType.BLOCK_STORAGE, "https://evs.xxx.yyy.com/v2/%
(project_id)s"");
endpointResolver.addOverrideEndpoint(ServiceType.VOLUME_BACKUP, "https://vbs.xxx.yyy.com/v2/%
(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.AUTO_SCALING, "https://as.xxx.yyy.com/autoscaling-api/
v1/%(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.LOAD_BALANCER, "https://elb.xxx.yyy.com/v1.0/%
(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.MAP_REDUCE, "https://mrs.xxx.yyy.com/v1.1/%
(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.KEY_MANAGEMENT, "https://kms.xxx.yyy.com/v1.0/%
(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.CLOUD_TRACE, "https://cts.xxx.yyy.com/v1.0/%
(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.ANTI_DDOS, "https://antiddos.xxx.yyy.com/v1/%
(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.Notification, "https://smn.xxx.yyy.com/v2/%
(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.MessageQueue, "https://dms.xxx.yyy.com/v1.0/%
(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.MAAS, "https://maas.xxx.yyy.com/v1/%(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.ECS, "https://ecs.xxx.yyy.com/v1/%(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.ECS1_1, "https://ecs.xxx.yyy.com/v1.1/%(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.EVS, "https://evs.xxx.yyy.com/v2/%(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.EVS2_1, "https://evs.xxx.yyy.com/v2.1/%(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.VPC, "https://vpc.xxx.yyy.com/v1/%(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.VPC2, "https://vpc.xxx.yyy.com/v2.0/%(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.IDENTITY, "https://iam.xxx.yyy.com/v3");
endpointResolver.addOverrideEndpoint(ServiceType.ORCHESTRATION, "https://rts.xxx.yyy.com/v1/%
(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.NAT, "https://nat.xxx.yyy.com/v2.0");
endpointResolver.addOverrideEndpoint(ServiceType.BMS, "https://bms.xxx.yyy.com/v1/%(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.DEH, "https://deh.xxx.yyy.com/v1.0/%(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.CSBS, "https://csbs.xxx.yyy.com/v1/%(project_id)s");
endpointResolver.addOverrideEndpoint(ServiceType.IAM, "https://iam.xxx.yyy.com/v3");
● 上述代码中xxx.yyy的格式为:“区域.云平台域名”,参数详情可以访问这里了
解。
● 上述代码中project_id不需要替换为实际值。
● 单击此处获取使用Java SDK的一个完整代码示例,供参考。
2.2.2.4 Java SDK 故障排查
执行如下代码,将Java SDK的执行细节打印出来:
OSFactory.enableHttpLoggingFilter(true);