【问题标题】:Azure SDK + Java Libraries + Eclipse Plugin = One confused soulAzure SDK + Java 库 + Eclipse 插件 = 一个迷茫的灵魂
【发布时间】:2012-09-25 04:11:58
【问题描述】:

我遵循了这些步骤,希望让本地主机上的存储模拟器正常工作。

我使用的是 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();
            }
        }
    }
    

它给出了以下异常:

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)

此时我很困惑,因为可能出了什么问题。有人可以帮我吗?

【问题讨论】:

    标签: java azure azure-storage-emulator


    【解决方案1】:

    我认为发生错误是因为 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出来,希望那个版本的模拟器支持最新的存储服务版本。

    【讨论】:

    • 以前版本的 JAR 版本是否存档在某个地方?你知道吗?
    • 我进行了更改,但没有成功。同样的错误。我想可能还有其他地方。
    • 不幸的是,我已经很久没有在 Java 中工作了,所以我不知道如何编译修改后的代码。如果您可以分享一些关于如何在 eclipse 中加载源代码并编译它(使用 Eclipse 或 javac)的说明,我很乐意尝试一下。
    • JAR 文件可以用 7-Zip 打开。我第一次尝试这样做: 1. 通过右键单击并以 7-zip 打开 Jar 文件。 2. 把class文件拖出来,试了反编译器,修改了字符串,编译成Java类文件,拖到7-zip的JAR里面。给出了同样的错误。然后我尝试了正确的方法: 1. 从github 下载并使用 README.md 2. 下载 Maven 并按照这些instructions 安装 3. 按照 README.md 进行 mvn 编译
    • 4.现在这会转储里面的所有类文件: WindowsAzure-azure-sdk-for-java-da5d538\microsoft-azure-api\target\classes 5. 此时,在 eclipse 中打开一个新的 Java 项目,在 Package Explorer 中,右键单击项目,属性,Java 构建路径,添加外部类路径,浏览到 WindowsAzure-azure-sdk-for-java-da5d538\microsoft-azure-api\target 6. 编写一小段 Azure 代码并运行。在调试时,如果您遇到异常并且它以人类可读格式打开字节码,您可以添加源并浏览到源目录以添加文件。
    【解决方案2】:

    更多关于URI

    看看下面是否适合你。

    URI BlobEndPoint = new URI("http://127.0.0.1:10000/devstoreaccount1");
    
    CloudBlobClient bClient = new CloudBlobClient(BlobEndPoint, new StorageCredentialsAccountAndKey(AccountName,
                    AccountSecurityKey));
    

    【讨论】:

    猜你喜欢
    • 2023-03-04
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多