Azure SDK + Java库+ Eclipse插件=一个混乱的灵魂

时间:2012-09-25 04:11:59

标签: java azure azure-storage-emulator

我按照这些步骤希望在localhost上运行存储模拟器。

我正在使用Windows 8 RTM。

  1. 已下载Eclipse并将其复制到Program Files。
  2. 已安装的Java JDK 7。
  3. 已安装Azure SDK
  4. 为Eclipse安装了Azure plugin
  5. 从“开始”屏幕启动存储模拟器。
  6. 创建了一个Java项目。
  7. 在Azure的构建路径中为此项目添加了外部jars
  8. 写了这个简单的示例代码:

    import com.microsoft.windowsazure.services.blob.client.CloudBlobClient;
    import com.microsoft.windowsazure.services.blob.client.CloudBlobContainer;
    import com.microsoft.windowsazure.services.core.storage.CloudStorageAccount;
    
    public class AzureStore {
        public static final String storageConnectionString = "DefaultEndpointsProtocol=http;"
                + "UseDevelopmentStorage=true;"
                + "AccountName=devstoreaccount1;"
                + "BlobEndpoint=http://127.0.0.1:10000;"
                + "AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==";
    
        public static void main(String[] args) throws Exception {
            // Retrieve storage account from connection-string
            CloudStorageAccount storageAccount = CloudStorageAccount
                    .parse(storageConnectionString);
    
            // Create the blob client
            CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
            // Get a reference to a container
            // The container name must be lower case
            CloudBlobContainer container = blobClient
                    .getContainerReference("tweet");
    
            try {
                // Create the container if it does not exist
                System.out.println(container.createIfNotExist());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
  9. 它提供以下例外:

    com.microsoft.windowsazure.services.core.storage.StorageException: The value for one of the HTTP headers is not in the correct format.
    at com.microsoft.windowsazure.services.core.storage.StorageException.translateException(StorageException.java:104)
    at com.microsoft.windowsazure.services.blob.client.CloudBlobContainer$2.execute(CloudBlobContainer.java:334)
    at com.microsoft.windowsazure.services.blob.client.CloudBlobContainer$2.execute(CloudBlobContainer.java:291)
    at com.microsoft.windowsazure.services.core.storage.utils.implementation.ExecutionEngine.executeWithRetry(ExecutionEngine.java:110)
    at com.microsoft.windowsazure.services.blob.client.CloudBlobContainer.createIfNotExist(CloudBlobContainer.java:339)
    at com.microsoft.windowsazure.services.blob.client.CloudBlobContainer.createIfNotExist(CloudBlobContainer.java:257)
    at AzureStore.main(AzureStore.java:26)
    

    我在这一点上感到困惑,因为可能是错的。有人能帮助我吗?

2 个答案:

答案 0 :(得分:0)

有关URI

的更多信息

看看下面是否适合您。

URI BlobEndPoint = new URI("http://127.0.0.1:10000/devstoreaccount1");

CloudBlobClient bClient = new CloudBlobClient(BlobEndPoint, new StorageCredentialsAccountAndKey(AccountName,
                AccountSecurityKey));

答案 1 :(得分:0)

我认为错误正在发生,因为API中的存储服务版本不正确。在您的代码中,您尝试在开发存储中创建blob容器。 “x-ms-version”请求标头值作为“2012-02-12”发送,虽然它是最新的但仍未得到开发存储的支持。开发存储仍支持“2011-08-18”。

如果您针对云存储尝试代码,则应该能够创建该blob容器。

如果您只是针对开发存储进行开发,那么您可以做的一件事就是从GitHub(https://github.com/WindowsAzure/azure-sdk-for-java/downloads)下载源代码并修改Constants.java中的以下代码行

public static final String TARGET_STORAGE_VERSION = "2012-02-12";

public static final String TARGET_STORAGE_VERSION = "2011-08-18";

再次编译源代码。这可能会破坏最新服务版本中引入的一些新功能(如异步复制blob等)。

其他选择是等待新SDK出来,并希望该版本的模拟器支持最新的存储服务版本。