S2Flex2のgateway(Beta1)とmxmlのタグを利用することでdFlex Enterprise Services 2(FES2)がなくても、これまでのAMF0を利用してJavaObjectとの連携ができるようになりました。
AS3とJavaObjectのマッピングはRemoteClassアノテーションを使うことで自動的にマッピングすることができます
[RemoteClass(alias=&qout;examples.flex2.dto.AddDto&qout;)]
または、registerClassAliasを利用しても同じことになります。
registerClassAlias(&qout;examples.flex2.dto.AddDto&qout;,examples.flex2.dto.AddDto);
AS3側で上記の記述をセットすることでJavaObjectにマッピングすることができます。
しかし、サーバから取得したオブジェクトは、JavaObjectからAS3に変換するときに型情報が失われてAS側ではObject型になってしまいます。
この受け取り側のマッピングについていろいろ実験していましたが、
結局解決していません。(-_-;)
同じAS3のオブジェクトを渡してもRemoteObjectタグでFES2と接続すると、JavaObjectとAS3のObjectがマッピングされて、CustomClassとして受け取ることができました。
接続方法 | プロトコル | 接続先 | 結果 |
---|---|---|---|
mx:RemoteObjectタグ | AMF3 | FES2 | 〇(型情報を保持) |
s2:S2Componentタグ | AMF0 | FES2 | ×(型情報がなくなってObject型になる。) |
s2:S2Componentタグ | AMF0 | S2Flex2Gateway | ×(型情報がなくなってObject型になる。) |
上記の例からすると、AMF0での接続の場合は型情報が失われてしまい、Objectクラスのオブジェクトになってしまうということになります。
または、s2:S2Componentの接続方法に問題があるのかもしれません。
S2Flex2Beta1リリースからずっと気になっていろいろ試しているのですがいまだに解決していません。
たとえば...
・JavaObject側にSerializableをつけてみる
・AS3にTypeという名前の属性をつけてみる
いまのところ、型情報にあったものを返す方法がわかりません...
CustomClassで返してくれる方法があるのでしょうか...
RemoteClassアノテーション
ひがさんのエントリーです。
http://d.hatena.ne.jp/higayasuo/20060216#1140085882
[Flex]PrettyAMF(Flex Coder)
コメントで議論されています。
http://d.hatena.ne.jp/sato-shi/20060220/p1#c
この記事に対するコメント