2016-04-27 9 views
0

Riak開発では比較的新しいです。私は、Riakクラスターに接続するRiak Javaクライアントに接続するために、C++クライアントを使用しています。 C++クライアントは、 "GET"という形式のGoogleプロトコルバッファを使用して文字列としてクエリをシリアル化します.KEYとRiak Javaクライアントは応答を "OK"としてシリアル化します:VALUE。しかし、値がデータベースに見つからなかったケースを適切に処理する方法はありますか?Riak Javaクライアントで、キー/値オブジェクトが見つからない場合を適切に処理する方法

これはDBからオブジェクトを取得するRiakには、Javaクライアントからのサンプルコードである:

String key //Contains the actual key 
Namespace ns; 

byte[] retVal = null; 

Location location = new Location(ns, key); 

try { 
    FetchValue fv; 

    FetchValue.Response response = client.execute(fv); 

    if (response.isNotFound()) { 
    System.out.println("The key/value pair was not found"); 
    } else { 
    RiakObject obj = response.getValue(RiakObject.class); 
    retVal = obj.getValue().getValue(); 
    } 
} 
catch (...) {...} 

return retVal; 

}

オブジェクトが見つからなかった場合は、バイト[]配列は、NULL

まま

これは、応答をシリアル化するRiakには、Javaクライアントからのサンプルコードです:

ByteString valueBuf = ByteString.copyFrom(value); 

// Generate reply message 
reply = Request.RequestMessage.newBuilder().setCommand("OK").setValue(valueBuf).build().toByteArray(); 

しかし、Null配列からコピーしようとするので、コードはcopyFrom行でNullPointerExceptionをスローします。これをもっときれいにする方法はありますか?

ありがとうございます!

答えて

1

copyFrom()コールを試行する前に、value == nullを確認してください。

また、統合のためにJavaクライアントではなく、C(cgo)からGoの機能を呼び出すことを検討する必要があります。私はそれをvery, very basic demonstrationと一緒に入れました。here

関連する問題