Amf3Input/Output

AMF3の一番コアな部分を取り出してみたら、こうなった。

SerializationContext serializationContext = SerializationContext.getSerializationContext();
ByteArrayOutputStream bout = new ByteArrayOutputStream();			
Amf3Output amf3Output = new Amf3Output(context);
amf3Output.setOutputStream(bout);
			
amf3Output.writeObject(testBean);
amf3Output.flush();
amf3Output.close();
			
InputStream bIn = new ByteArrayInputStream(bout.toByteArray());
Amf3Input amf3Input = new Amf3Input(context);
amf3Input.setInputStream(bIn);
Object o = amf3Input.readObject();

System.out.println(o);

SerializationContextは、AmfInput/Outputで利用するプロパティが入ったクラス。
型変換時にエラーにするかどうかとか、クラスエイリアスを使うかどうかなどの設定がはいってる。
testBeanは単純なJavaBean。
flex.messaging.io.amf.Amf3Input/OutputはObjectOutputStream/ObjectInputStreamのサブクラスとして定義されていて、
それと同じ感じでシリアライズ・デシリアライズできる。


実際の通信は、flex.messaging.io.amf.AmfMessage型にデータを入れて行っている模様。
このクラスにはheaderとbodyがあり、SOAPメッセージと構造は大体一緒。
AmfMessageのシリアライズ・デシリアライズには、AmfMessageSerializer/Deserializerを使用している。


ServletInputStreamをAmfMessageSerializerに繋げてオブジェクトを取り出し、ユーザーコードを呼び出した後に
戻り値をAmfMessaseDeserializerを使ってServletOutputStreamに流せば、うまくAMF部分だけを利用できそうだ。