2011-11-14 20 views
0

シリアライゼーションを実装するいくつかのJavaクラスと、IExternalizableを実装する対応するASオブジェクト(GASによって自己生成)があります。JavaオブジェクトのBlazeDsシリアル化

あり、サーバからオブジェクトを受け取る問題はありませんが、私は、サーバーにオブジェクトを送信しようとすると - それは例外をスロー:

[BlazeDS]Class 'xxx' must implement java.io.Externalizable to receive client 
IExternalizable instances. flex.messaging.io.SerializationException: Class 'xxx' must 
implement java.io.Externalizable to receive client IExternalizable instances. 

本当に私はJavaサーバにオブジェクトを送信するために外部化を実装する必要があります!

+0

OK、それは我々が実装しなければならないことを言っていない – Assaf

答えて

1

実際、私はExternalizableを実装する必要はなく、Serializableを実装する必要はありません。 代わりに、フレックス側で完全なJavaクラスパスを指すエイリアスを持つリモートクラスを指定する必要があります。また、プロパティ名(またはgetterとsetter)がJavaオブジェクトのプロパティ名と同じであることを確認する必要があります。最後に、オブジェクト/プロパティの型がよく一致するかどうかを確認する必要があります(数字のJavaオブジェクトをFlexなどのNumberに変換します)。

+0

何が別のクラスから保護された変数を宣言するかのように、複雑なデータ型についてはどうですか? –

0

Externalizableを実装する必要があります。サーバー上のクライアントとJavaでのActionScriptとの間でデータをシリアライズおよびデシリアライズするための標準的なメカニズムがニーズを満たしていない場合は

ActionScriptとJavaの間のカスタムシリアライゼーションを使用してhttp://help.adobe.com/en_US/LiveCycleDataServicesES/3.1/Developing/WSc3ff6d0ea77859461172e0811f00f6eab8-7ffdUpdate.html

を参照してください。独自のシリアライズスキームを書くことができます。 ActionScriptベースのflash.utils.IExternalizableインタフェースをクライアント上に実装し、対応するJavaベースのjava.io.Externalizableインタフェースをサーバ上に実装します。

+0

...より答えとしてそれを置く、と私は仕事に戻るだろう、それはあなたがシリアライズに満足していない場合は、あなたがそれを行うことができますことを言います... – Assaf

+1

BlazeDSシリアライザがシリアル化のためにクラスを取得するためには、少なくともシリアライザブルを実装する必要があります。外部化を実装するカスタム読み取り、書き込み、およびカスタムシリアライズするためのメソッドを書くことができます。 –

+0

ドキュメントは_flash.utils.IExternalizable_のデフォルトのデータ変換が_java.io.Externalizable_にあると述べ、これはASクラスのJavaのカウンターパートは、外部化を実装しなければならないことを意味します。 –

関連する問題