2014-02-07 2 views
2

우리가 사용하는 jclouds 라이브러리를 버전 1.5에서 1.7로 업데이트하려고합니다. RestContext 1.6 이후 사용되지 않습니다 https://github.com/jclouds/jclouds-examples/tree/master/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfilesrackspace cloudfiles throws ContainerNotFoundException jclouds 1.5에서 1.7로 옮긴 후

private RestContext<CommonSwiftClient, CommonSwiftAsyncClient> swift; 
BlobStoreContext context = ContextBuilder.newBuilder(PROVIDER) 
.credentials(username, apiKey) 
.buildView(BlobStoreContext.class); 

swift = context.unwrap(); 

:

우리는 API에게 다음과 같은 방법으로 액세스 할 수 있습니다. 런타임에

ContextBuilder contextBuilder = ContextBuilder.newBuilder(rackspaceProvider) 
.credentials(rackspaceUsername, rackspaceApiKey); 
rackspaceApi = contextBuilder.buildApi(CloudFilesClient.class); 

나는 다음과 같은 오류 얻을 파일 업로드 : 다음 jclouds의 GitHub의 프로젝트

org.jclouds.blobstore.ContainerNotFoundException 

의 예를 것을 http://demobox.github.io/jclouds-maven-site-1.6.0/1.6.0/jclouds-multi/apidocs/org/jclouds/rest/RestContext.html

는 나는 이런 식으로 작업을 진행하려 사용되지 않는 접근 방식을 사용하십시오 (위에서 언급 한 링크).

어떻게 해결할 수 있습니까? 어떤 대안?

답변

2

업로드 할 컨테이너가 있습니까? putObject 메서드는 이름이없는 컨테이너를 자동으로 만들지 않습니다. 먼저 createContainer을 명시 적으로 호출하여 생성해야합니다. 여기

는 컨테이너를 만들고 그것으로 파일 업로드 예입니다 : 당신은 jclouds-examples의 예제는 여전히 RestClient을 참조하는지 맞아

CloudFilesClient client = ContextBuilder.newBuilder("cloudfiles-us") 
    .credentials(USERNAME, APIKEY) 
    .buildApi(CloudFilesClient.class); 

client.createContainer("sample"); 

SwiftObject object = client.newSwiftObject(); 
object.getInfo().setName("somefile.txt"); 
object.setPayload("file or bytearray or something else here"); 
client.putObject("sample", object); 

// ... 

client.close(); 

를하지만하여 새로운 스타일로 변환 할 수 있어야한다 rackspaceApi 개체를 swift.getApi()으로 대체하십시오.

+0

감사합니다. 컨테이너가 있습니다 - 언급하는 것을 잊었습니다. 새 컨테이너를 만들 때 완벽하게 작동했습니다. 기존 컨테이너에 액세스하려고해도 여전히 ContainerNotFoundException이 발생합니다. –

관련 문제