3

gov.nist.javax.sip.stack.SIPDialog オブジェクトを Cassandra にシリアライズおよびデシリアライズしようとしていました。しかし、シリアライズした元の SIPDialog オブジェクトと比較すると、デシリアライズされたオブジェクトの equals 比較は失敗します。SO は、シリアライゼーションで何かが欠けているようです。ByteArraySerializer を使用して、バイトを Cassandra に読み書きしています。

//保存ダイアログ

MutationBatch mutationBatch = createMutator();
byte[] dialogBytes = SIPDialogEntity.serializeDialog(dialog);

mutationBatch.withRow(SIPDIALOGS, dialogId)
.putColumn("dialog".getBytes(),dialogBytes,null);
mutationBatch.execute();

public static byte[] serializeDialog(SIPDialog dialog) throws IOException {

    ByteArrayOutputStream bStream = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(bStream);       
    oos.writeObject(dialog);
    oos.close();
    byte[] bytes = bStream.toByteArray();
    bStream.close();

    return bytes;
}   

//読み込みダイアログ

Column<byte[]> result;
result = getKeySpace().prepareQuery(SIPDIALOGS).getKey(dialogId).getColumn("dialog").execute().getResult();
        sipDialog = SIPDialogEntity.deserializeDialog(result.getByteArrayValue());

public static SIPDialog deserializeDialog(byte[] byteArrayDialog) throws IOException, ClassNotFoundException {      
    System.out.println("DEBUG Reading Dialog Bytes:" + byteArrayDialog );       
    ByteArrayInputStream bStream = new ByteArrayInputStream(byteArrayDialog);
    ObjectInputStream ois = new ObjectInputStream(bStream);     
    SIPDialog dialog = (SIPDialog) ois.readObject();
    ois.close();
    bStream.close();
    return dialog;
}   
4

2 に答える 2

2

SIPDialog クラスは equals メソッドをオーバーライドしないため、比較に失敗します。http://java.net/jira/browse/JSIPの jain sip で問題を開いてください。

于 2012-10-19T09:26:39.593 に答える
0

うーん、SipDialog があなたのクラスの場合、すべての作業をスキップして、cassandra に PlayOrm を使用できます;)。その後、シリアル化/逆シリアル化を処理する必要はありません。

それがあなたのクラスでない場合は、エンティティに変換されるサードパーティ Bean を追加する方法を追加してもらい、Guice がバインド ファイルで行うのと同じように、PlayOrm で保存できるエンティティにバインドできるようにすると思います。PlayOrm でチケットを開いてリクエストを送信すると、おそらく 1 週間ほどで機能を利用できるようになります。

于 2012-10-18T13:36:25.247 に答える