2016-09-06 17 views
1

を投げサンプルプログラム、私は基本的な読み、作成を実行しようとしています、更新、下記のリンクで与えられるようAzureテーブルストレージの操作を削除します。 https://azure.microsoft.com/en-us/documentation/articles/storage-java-how-to-use-table-storage/Java用のAzure SDK - Java用AzureストレージSDKを使用して例外:InvalidKeyException

表を作成するためのサンプルプログラム:

package com.azure.test; 
import java.io.UnsupportedEncodingException; 
import com.microsoft.azure.storage.*; 
import com.microsoft.azure.storage.table.CloudTable; 
import com.microsoft.azure.storage.table.CloudTableClient; 
import com.microsoft.windowsazure.core.utils.Base64; 

public class App 
{ 

    public static void main(String[] args) throws StorageException, UnsupportedEncodingException 
{ 

    String storageConnectionString = 
      "DefaultEndpointsProtocol=http;" + 
      "AccountName=accountname;" + 
      "AccountKey=storagekey;"+ 
      "EndpointSuffix=table.core.windows.net"; 

    try 
    { 
     // Retrieve storage account from connection-string. 
     CloudStorageAccount storageAccount = 
      CloudStorageAccount.parse(storageConnectionString); 

     CloudTableClient tableClient =    storageAccount.createCloudTableClient(); 

     //Create the table if it doesn't exist. 
     String tableName = "MyTable"; 
     CloudTable cloudTable = tableClient.getTableReference(tableName); 
     cloudTable.createIfNotExists();    

    } 
    catch (Exception e) 
    { 
     // Output the stack trace. 
     e.printStackTrace(); 
     System.out.println(e.getMessage()); 
     } 
    } 
} 

コードはかなり分かりやすいようです。 Azureテーブルストレージに接続し、指定された名前のテーブルが存在しない場合は作成します。しかし、私はInvalidKeyExceptionを取得しています(完全な例外は以下に貼り付けられています)。

java.security.InvalidKeyException:Storage Keyが有効なBase64エンコード文字列ではありません。 com.microsoft.azure.storage.StorageCredentials.tryParseCredentials(StorageCredentials.java:68)com.microsoft.azure.storage.CloudStorageAccount.tryConfigureServiceAccount(CloudStorageAccount.java:408)で

com.microsoft.azure ATで
.storage.CloudStorageAccount.parse(CloudStorageAccount.java:259)com.azure.test.App.main(App.java:71)で

私はAzureストレージを使用して多くの人々が直面していることに驚いていますこの問題。私はストレージキーを使用してエンコードしようとしましたが、接続文字列でエンコードされたキーを使用しましたが、まだ使用していません。

String encodedKey=Base64.encode(storageKey.getBytes()) 

String storageConnectionString = 
      "DefaultEndpointsProtocol=http;" + 
      "AccountName=accountname" + 
      "AccountKey="+encodedKey+ 
      "EndpointSuffix=table.core.windows.net;"; 

誰でもこの手伝いできますか?私はGoogleでたくさん検索し、1人のユーザーがディスカスで同様の問題を提起しているのを見つけることができましたが、答えが提供されていない、あるいは答えが役に立たなかったことがあります。

+0

こんにちはブライアン、私はあなたの提案を取って、答えのボックスに私の解決策を掲載した。また、私はGauravの回答をupvoteしようとしていますが、少し助けてくれましたが、担当者の数が少ないためにできません。残念ながらカウントアップするために、少なくとも15人の担当者が必要です。 – user2123507

+0

あなたが投票できない場合でも、ダニをクリックして回答の1つを受け入れることができるはずです。 –

答えて

1

次のコード行に変更してください:あなたのコード内で基本的に

String storageConnectionString = 
      "DefaultEndpointsProtocol=http;" + 
      "AccountName=accountname" + 
      ";AccountKey="+encodedKey+ 
      ";EndpointSuffix=core.windows.net;"; 

String storageConnectionString = 
      "DefaultEndpointsProtocol=http;" + 
      "AccountName=accountname" + 
      "AccountKey="+encodedKey+ 
      "EndpointSuffix=table.core.windows.net;"; 

を、AccountNameAccountKeyEndpointSuffixの間には、セパレータ(;は)ありませんでした。また、標準エンドポイント(core.windows.net)に接続している場合は、接続文字列にEndpointSuffixを指定する必要はありません。

最後に、アカウントキーが正しいことを確認してください。

+0

こんにちはGaurav、迅速な返信をいただきありがとうございます。私は実際のコードでAccountName、AccountKeyとEndpointSuffixのパラメータを分けていましたが、プライバシのために実際のAccountNameとAccountkeyを削除するために接続文字列を編集しました。サンプルプログラムを実行したとき、セパレータは関連する場所にありましたが、私のプログラムはこの例外を投げました。 EndpointSuffixについて、サンプルを初めて実行したときに私はそれを知らせませんでした。 UnknownHost例外によってStorageExceptionがスローされました。 – user2123507

+0

同じ資格情報を使用して、Azure Storage Explorerツールを使用して私のAzureテーブルストレージに接続することができます。したがって、資格情報は有効です。また、セパレータを接続文字列に含めるように質問を編集しました。ありがとう。 – user2123507

+0

あなたの質問を使用しているコードで更新してください。アカウント名とキーをダミー値で置き換えてください。実際に使用している実際のコードを実際に見ることなく、あなたのコードに何が間違っているかを言うのは実際は非常に難しいです。 –

3

更新:問題の/解像度私は、接続文字列内のすべてのプロパティが区切られていることを確実にすべての

まず「;」 (下の)Gauravが提案したように

私の会社の作業機械がプロキシを使ってインターネットに接続しているので、自分のプログラムでプロキシ設定を手動で設定する必要があることが判明しました。

System.getProperties().put("http.proxyHost", "myproxyHost"); 
System.getProperties().put("http.proxyPort", "myProxyPort"); 
System.getProperties().put("http.proxyUser", "myProxyUser"); 
System.getProperties().put("http.proxyPassword","myProxyPassword"); 

プロキシ設定を更新すると私の問題が解決しました。

関連する問題