在 Spring MVC 应用程序中使用 jclouds 创建 BlobContext 时出错
Posted
技术标签:
【中文标题】在 Spring MVC 应用程序中使用 jclouds 创建 BlobContext 时出错【英文标题】:Error creating BlobContext using jclouds in a Spring MVC application 【发布时间】:2014-02-27 11:29:08 【问题描述】:我有一个 Spring MVC 4.0.1 Web 应用程序,需要将文件上传到 Rackspace Cloud Files。我正在使用 Apache jClouds 来做到这一点。尝试使用以下代码创建 BlobStore 时:
BlobStoreContext context = ContextBuilder.newBuilder("cloudfiles-us").credentials("username","password").buildView(BlobStoreContext.class);
我得到以下异常:
com.google.inject.CreationException: Guice creation errors:
1) No implementation for com.google.common.base.Supplier<java.lang.String> annotated with @org.jclouds.openstack.swift.TemporaryUrlKey() was bound.
while locating com.google.common.base.Supplier<java.lang.String> annotated with @org.jclouds.openstack.swift.TemporaryUrlKey()
for parameter 4 at org.jclouds.openstack.swift.blobstore.SwiftBlobSigner.<init>(SwiftBlobSigner.java:88)
at org.jclouds.cloudfiles.CloudFilesApiMetadata$CloudFilesTemporaryUrlExtensionModule.bindRequestSigner(CloudFilesApiMetadata.java:101)
2) No implementation for org.jclouds.openstack.swift.CommonSwiftClient was bound.
while locating org.jclouds.openstack.swift.CommonSwiftClient
for parameter 4 at org.jclouds.cloudfiles.blobstore.CloudFilesBlobStore.<init>(CloudFilesBlobStore.java:63)
at org.jclouds.cloudfiles.blobstore.config.CloudFilesBlobStoreContextModule.configure(CloudFilesBlobStoreContextModule.java:64)
3) No implementation for org.jclouds.openstack.swift.CommonSwiftClient was bound.
while locating org.jclouds.openstack.swift.CommonSwiftClient
for parameter 0 at org.jclouds.openstack.swift.blobstore.strategy.internal.SequentialMultipartUploadStrategy.<init>(SequentialMultipartUploadStrategy.java:51)
while locating com.google.inject.Provider<org.jclouds.openstack.swift.blobstore.strategy.internal.MultipartUploadStrategy>
for parameter 14 at org.jclouds.cloudfiles.blobstore.CloudFilesBlobStore.<init>(CloudFilesBlobStore.java:63)
at org.jclouds.cloudfiles.blobstore.config.CloudFilesBlobStoreContextModule.configure(CloudFilesBlobStoreContextModule.java:64)
4) org.jclouds.rest.config.SyncToAsyncHttpApiProvider<org.jclouds.openstack.keystone.v1_1.AuthenticationClient, A> cannot be used as a key; It is not fully specified.
5) org.jclouds.rest.config.SyncToAsyncHttpApiProvider<org.jclouds.rest.HttpClient, A> cannot be used as a key; It is not fully specified.
6) org.jclouds.rest.config.SyncToAsyncHttpApiProvider<org.jclouds.cloudfiles.CloudFilesClient, A> cannot be used as a key; It is not fully specified.
7) org.jclouds.rest.config.SyncToAsyncHttpApiProvider<org.jclouds.openstack.swift.extensions.TemporaryUrlKeyApi, A> cannot be used as a key; It is not fully specified.
8) org.jclouds.rest.RestContext<org.jclouds.cloudfiles.CloudFilesClient, A> cannot be used as a key; It is not fully specified.
9) No implementation for org.jclouds.location.suppliers.RegionIdToURISupplier$Factory was bound.
at org.jclouds.cloudfiles.config.CloudFilesRestClientModule$StorageAndCDNManagementEndpointModule.provideCDNUrl(CloudFilesRestClientModule.java:67)
10) No implementation for org.jclouds.openstack.keystone.v1_1.suppliers.V1DefaultRegionIdSupplier$Factory was bound.
at org.jclouds.cloudfiles.config.CloudFilesRestClientModule$StorageAndCDNManagementEndpointModule.provideCDNUrl(CloudFilesRestClientModule.java:67)
11) No implementation for org.jclouds.location.suppliers.RegionIdToURISupplier$Factory was bound.
at org.jclouds.cloudfiles.config.CloudFilesRestClientModule$StorageAndCDNManagementEndpointModule.provideStorageUrl(CloudFilesRestClientModule.java:76)
12) No implementation for org.jclouds.openstack.keystone.v1_1.suppliers.V1DefaultRegionIdSupplier$Factory was bound.
at org.jclouds.cloudfiles.config.CloudFilesRestClientModule$StorageAndCDNManagementEndpointModule.provideStorageUrl(CloudFilesRestClientModule.java:76)
13) No implementation for org.jclouds.openstack.keystone.v1_1.AuthenticationClient was bound.
at org.jclouds.rest.config.BinderUtils.bindHttpApiProvider(BinderUtils.java:106)
14) No implementation for org.jclouds.rest.HttpClient was bound.
at org.jclouds.rest.config.BinderUtils.bindHttpApiProvider(BinderUtils.java:106)
15) No implementation for org.jclouds.cloudfiles.CloudFilesClient was bound.
at org.jclouds.rest.config.BinderUtils.bindHttpApiProvider(BinderUtils.java:106)
16) No implementation for org.jclouds.openstack.swift.extensions.TemporaryUrlKeyApi was bound.
at org.jclouds.rest.config.BinderUtils.bindHttpApiProvider(BinderUtils.java:106)
16 errors
我无法弄清楚,因为此时它几乎是示例代码的第一行......
【问题讨论】:
【参考方案1】:您是在运行 jclouds 1.6.x 还是 1.7.0 和 Java 7u51?如果是这样,您可能遇到过 https://issues.apache.org/jira/browse/JCLOUDS-427 。您可以通过降级到 Java 7u45 或升级到 jclouds 1.7.1 来解决此问题。
【讨论】:
我使用的是 Java 7u51。就是这样!以上是关于在 Spring MVC 应用程序中使用 jclouds 创建 BlobContext 时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 RestTemplate 在 Spring MVC 应用程序中访问来自(来自 Spring RESTful 服务)的巨大 JSON
在 Spring MVC 应用程序中使用 jclouds 创建 BlobContext 时出错