안녕하세요. IBM Cloud Object Storage 담당자 여러분, 내 고객의 질문입니다.IBM Cloud Object Storage Java SDK에서 오브젝트 저장 영역에 연결하는 중 오류가 발생했습니다.
고객은 다음 URL의 샘플 코드를 참조합니다. https://console.bluemix.net/docs/services/cloud-object-storage/libraries/java.html#getting-the-sdk
다음은 고객이 실행하는 코드입니다.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package bluemixtest;
import com.amazonaws.ClientConfiguration;
import com.amazonaws.SDKGlobalConfiguration;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import com.ibm.oauth.BasicIBMOAuthCredentials;
import java.util.List;
/**
*
* @author m_ishikawa
*/
public class BlueMixTest {
private static AmazonS3 _s3Client;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
SDKGlobalConfiguration.IAM_ENDPOINT = "https://iam.bluemix.net/oidc/token";
String bucketName = "xxxxx";
String api_key = "xxxxx";
String service_instance_id = "xxxxx";
String endpoint_url = "https://s3-api.us-geo.objectstorage.softlayer.net";
// String endpoint_url = "https://cos-service.bluemix.net/endpoints";
String location = "us";
_s3Client = createClient(api_key, service_instance_id, endpoint_url, location);
listObjects(bucketName, _s3Client);
listBuckets(_s3Client);
}
public static AmazonS3 createClient(String api_key, String service_instance_id, String endpoint_url, String location) {
AWSCredentials credentials;
if (endpoint_url.contains("objectstorage.softlayer.net")) {
credentials = new BasicIBMOAuthCredentials(api_key, service_instance_id);
} else {
String access_key = api_key;
String secret_key = service_instance_id;
credentials = new BasicAWSCredentials(access_key, secret_key);
}
ClientConfiguration clientConfig = new ClientConfiguration().withRequestTimeout(5000);
clientConfig.setUseTcpKeepAlive(true);
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials))
.withEndpointConfiguration(new EndpointConfiguration(endpoint_url, location)).withPathStyleAccessEnabled(true)
.withClientConfiguration(clientConfig).build();
// .build();
return s3Client;
}
/**
* @param bucketName
* @param s3Client
*/
public static void listObjects(String bucketName, AmazonS3 s3Client) {
System.out.println("Listing objects in bucket " + bucketName);
ObjectListing objectListing = s3Client.listObjects(new ListObjectsRequest().withBucketName(bucketName));
for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
System.out.println(" - " + objectSummary.getKey() + " " + "(size = " + objectSummary.getSize() + ")");
}
System.out.println();
}
/**
* @param s3Client
*/
public static void listBuckets(AmazonS3 s3Client) {
System.out.println("Listing buckets");
final List<Bucket> bucketList = _s3Client.listBuckets();
for (final Bucket bucket : bucketList) {
System.out.println(bucket.getName());
}
System.out.println();
}
}
그러나 고객은 실행을 성공하지 않았다. 다음은 프로그램의 스택 추적입니다.
java.lang.IllegalArgumentException
\t at com.amazonaws.internal.config.InternalConfig.loadfrom(InternalConfig.java:235)
\t at com.amazonaws.internal.config.InternalConfig.load(InternalConfig.java:249)
\t at com.amazonaws.internal.config.InternalConfig$Factory.<clinit>(InternalConfig.java:304)
\t at com.amazonaws.util.VersionInfoUtils.userAgent(VersionInfoUtils.java:142)
\t at com.amazonaws.util.VersionInfoUtils.initializeUserAgent(VersionInfoUtils.java:137)
\t at com.amazonaws.util.VersionInfoUtils.getUserAgent(VersionInfoUtils.java:100)
\t at com.amazonaws.ClientConfiguration.<clinit>(ClientConfiguration.java:65)
\t at bluemixtest.BlueMixTest.createClient(BlueMixTest.java:58)
\t at bluemixtest.BlueMixTest.main(BlueMixTest.java:44)
Exception in thread "main" java.lang.ExceptionInInitializerError
\t at com.amazonaws.util.VersionInfoUtils.userAgent(VersionInfoUtils.java:142)
\t at com.amazonaws.util.VersionInfoUtils.initializeUserAgent(VersionInfoUtils.java:137)
\t at com.amazonaws.util.VersionInfoUtils.getUserAgent(VersionInfoUtils.java:100)
\t at com.amazonaws.ClientConfiguration.<clinit>(ClientConfiguration.java:65)
\t at bluemixtest.BlueMixTest.createClient(BlueMixTest.java:58)
\t at bluemixtest.BlueMixTest.main(BlueMixTest.java:44)
Caused by: java.lang.IllegalArgumentException
\t at com.amazonaws.internal.config.InternalConfig.loadfrom(InternalConfig.java:235)
\t at com.amazonaws.internal.config.InternalConfig.load(InternalConfig.java:249)
\t at com.amazonaws.internal.config.InternalConfig$Factory.<clinit>(InternalConfig.java:304)
\t ... 6 more
\t
는 사람이 근본 원인을 식별하는 해결 방법이나 아이디어가 있습니까?
ClientConfiguration clientConfig = new ClientConfiguration().withRequestTimeout(5000);
매우 가능성이 문제가 당신이 (. 예 com.amazonaws.*
)를 사용하는 자바 라이브러리입니다 : 당신의 스택 추적 오류를 바탕으로