从 jclouds 1.5 迁移到 1.7 后 rackspace cloudfiles 抛出 ContainerNotFoundException

Posted

技术标签:

【中文标题】从 jclouds 1.5 迁移到 1.7 后 rackspace cloudfiles 抛出 ContainerNotFoundException【英文标题】:rackspace cloudfiles throws ContainerNotFoundException after migration from jclouds 1.5 to 1.7 【发布时间】:2014-03-04 15:44:24 【问题描述】:

我正在尝试将我们使用的 jclouds 库从 1.5 版更新到 1.7 版。

我们通过以下方式访问 api: https://github.com/jclouds/jclouds-examples/tree/master/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles

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

swift = context.unwrap();

RestContext 自 1.6 起已弃用。 http://demobox.github.io/jclouds-maven-site-1.6.0/1.6.0/jclouds-multi/apidocs/org/jclouds/rest/RestContext.html

我试图让它这样工作:

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

在运行时,上传文件我收到以下错误:

org.jclouds.blobstore.ContainerNotFoundException

jclouds github 项目中的示例似乎使用了已弃用的方法(上面提到的链接)。

任何想法如何解决这个问题?有其他选择吗?

【问题讨论】:

【参考方案1】:

您要上传到的容器是否存在? putObject 方法不会自动创建您命名的容器(如果它不存在);您需要首先显式调用createContainer 来创建它。

这是一个创建容器并将文件上传到其中的示例:

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();

jclouds-examples 中的示例仍然引用 RestClient 是对的,但您应该能够通过将 rackspaceApi 对象替换为他们调用 swift.getApi() 的位置来转换为新样式。

【讨论】:

非常感谢!容器存在 - 我忘了提。当我创建一个新容器时,它运行良好。如果我尝试访问现有容器,我仍然会收到 ContainerNotFoundException。

以上是关于从 jclouds 1.5 迁移到 1.7 后 rackspace cloudfiles 抛出 ContainerNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

jclouds 支持较新的 vCloud API

如何使用 Jclouds 1.7 访问本机提供程序 API

Django 1.7 vs Django1.6 vs Django 1.5 [关闭]

无法将 Django 从 1.7 迁移到 1.8

从 South 迁移到 Django 1.7 迁移:可交换依赖项

由于移动到 java 1.7 Xml 文档元素不缩进