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部分だけを利用できそうだ。