2023年12月8日发(作者:)

ovirt-engine-sdk-java的使用过程中的错误整理

本篇记录ovirt java sdk的使用前准备与使用中的一些坑。

0、参考文档:

1、下载ovirt java sdk的jar包

2、下载所需要的依赖包

在下载页面下方,有着一个“Compile Dependencies”表格,是sdk的依赖包。

根据表格中的信息下载相应的版本的jar包。

3、测试使用

import ;

import Exception;

import redConnectionAttemptError;

import ption;

import agementException;

import ;

public class SdkTest {

private static final String URL = "host/api/";

private static final String USERNAME = "123@"; // 普通用户账号

private static final String PASSWORD = "123456";

@SuppressWarnings("deprecation")

public static void main(String[] args) throws ClientProtocolException, ServerException,

UnsecuredConnectionAttemptError, IOException {

Api api = new Api(URL, USERNAME, PASSWORD);

List vm = ().list();

int len = ();

for (int i = 0; i < len; i ++) {

("%sn", (i).getName());

}

try {

();

} catch (Exception e) {

tackTrace();

}

}

}

* 注意:“ClientProtocolException”异常是Api类必须的,而且是在ProtocolException(httpclient 4.2)中。

4、不停的ClassNotFoundException

(1)照理来说,只要将这些jar包放入buildpath中,就可以正常使用sdk了,但是实际的运行结果:

Exception in thread "main" sDefFoundError: org/apache/http/params/HttpParams

at .(:596)

at .(:109)

at (:22)

Caused by: otFoundException: rams

at ass(Unknown Source)

at ass(Unknown Source)

at er$ass(Unknown Source)

at ass(Unknown Source)

... 3 more

显示缺少了rams,但是我并没有用到这个东西!?

rams ----->>>

(2)加入了httpcore之后,还没完:

Exception in thread "main" sDefFoundError: org/apache/commons/logging/LogFactory

at gClientConnectionManager.(:73)

at gClientConnectionManager.(:99)

at gClientConnectionManager.(:85)

at PoolingClientConnectionManager(:314)

at DefaultHttpClient(:257)

at (:437)

at .(:607)

at .(:109)

at (:22)

Caused by: otFoundException: tory

at ass(Unknown Source)

at ass(Unknown Source)

at er$ass(Unknown Source)

at ass(Unknown Source)

... 9 more

这次缺的是tory。有种没完没了的感觉。

tory ----->>>

(3)又加了jar包,再次运行程序:

Exception in thread "main" sDefFoundError: org/apache/commons/codec/binary/Base64

at ticate(:186)

at ticate(:158)

at ticate(:125)

at s(:83)

at s(:80)

at s(:109)

at cess(:176)

at e(:516)

at e(:906)

at e(:805)

at e(:97)

at e(:114)

at (:415)

at (:394)

at ryPoint(:653)

at sources(:665)

at .(:615)

at .(:109)

at (:22)

Caused by: otFoundException: 64

at ass(Unknown Source)

at ass(Unknown Source)

at er$ass(Unknown Source)

at ass(Unknown Source)

... 19 more

是真的没完没了!?又缺了包!这次是64。到底是哪里用到了这东西

64 ----->>>

5、创建Api代理过程中的错误

(1)执行上面的代码,没有ClassNotFoundException。但是出现了500服务器错误。

Exception in thread "main"

code : 500

reason: Internal Server Error

detail: ErrorInternal Server Error

at e(:120)

at (:415)

at (:394)

at ryPoint(:653)

at sources(:665)

at .(:615)

at .(:109)

at (:25)

不知道具体原因。代码中使用的是普通账号,但是该账号和密码在ovirt engine上能成功登录。

后来使用管理员账号登录绕过了这个问题。

(2)管理员账号登录失败,因为证书验证失败

Exception in thread "main" rUnverifiedException: peer not authenticated

at rCertificates(Unknown Source)

at (:128)

at tSocket(:572)

at nnection(:180)

at (:294)

at nect(:641)

at e(:480)

at e(:906)

at e(:805)

at e(:97)

at e(:114)

at (:415)

在这里采用的解决方法是将ovirt engine的证书添加到jre的证书库中。

首先将下载好的crt证书复制到jre的安装目录下的bin目录中。

然后,在bin目录下打开cmd,执行命令:

D:SoftwareJavajre1.8bin>keytool -import -v -trustcacerts -alias svcloud -file -storepass changeit -keystore

D:/Software/Java/jre1.8/lib/sec

urity/cacerts

所有者: CN=.46215, O=, C=US

发布者: CN=.46215, O=, C=US

序列号: 1000

有效期为 Wed Sep 12 10:43:25 CST 2018 至 Sun Sep 10 10:43:25 CST 2028

证书指纹:

MD5: 35:B2:6F:79:15:29:7C:C3:39:D3:89:BC:1B:CA:08:38

SHA1: 05:62:9C:41:42:92:2D:ED:07:86:FF:01:AD:4F:49:1E:1C:83:F3:B2

SHA256: 99:37:BF:A9:CC:0B:FA:3C:C1:76:34:DA:71:22:02:2B:32:93:D4:D9:8B:

46:30:C6:B7:CC:CB:D9:08:B9:60:BD

签名算法名称: SHA256withRSA

主体公共密钥算法: 2048 位 RSA 密钥

版本: 3

。。。

是否信任此证书? [否]: y

证书已添加到密钥库中

[正在存储D:/Software/Java/jre1.8/lib/security/cacerts]

如果没报错,那么证书添加完毕。

(3)404 Not Found

Exception in thread "main"

code : 404

reason: Not Found

detail:

at e(:120)

at (:415)

at (:180)

at (:154)

at (:75)

at (:27)

把URL中的api最后的“/”去掉即可。并且URL一定是以“/api”结尾的。

(4)端口错误

Exception in thread "main" lArgumentException: Port is invalid: -1

at .(:90)

at SchemeRegistry(:381)

at PoolingClientConnectionManager(:312)

at DefaultHttpClient(:257)

at (:437)

at .(:607)

at .(:109)

at (:24)

6、所需要的所有jar包

D:及其依赖>dir

驱动器 D 中的卷是 软件

卷的序列号是 DA18-EBFA

D:及其依赖 的目录

2018-10-29 15:25

.

2018-10-29 15:25

..

2018-10-29 11:25 232,019

2018-10-29 14:55 284,184

2018-10-29 14:05 61,829

2018-10-29 11:25 424,648

2018-10-29 11:38 223,282

2018-10-29 11:21 489,884

2018-10-29 10:19 1,085,280

7 个文件 2,801,126 字节

2 个目录 63,892,709,376 可用字节

在最后的时候,才发现,原来后面缺少的jar包都是sdk的依赖包的依赖包。有点绕口,看图就知道了。

(1)commons-beanutils的依赖包

(2)log4j的依赖包(3)httpclient的依赖包