flex.messaging.MessageBrokerServlet endpointPath=/messagebroker/amf endpoint.server(req,res) -> flex.messaging.endpoints.BaseHTTPEndpoint super(req,res) -> AbstractEndPoint.service validateRequestProtocol(req): filterChain flex.messaging.endpoints.amf.SerializationFilter do the message serialization flex.messaging.io.MessageDeserializer flex.messaging.io.amf.Amf0Input amfIn //AMF package header int version=amfIn.readUnsignedShort(); //4 int headerCount=amfIn.readUnsignedShort(); //0 int bodyCount=amfIn.readUnsignedShort(); //1 //AMF message String targetURI=amfIn.readUTF(); //null String responseURI=amfIn.readUTF(); // /1 int length=amfIn.readInt(); //ignored //read object Object obj=amfIn.readObject(); flex.messaging.messages.ActionMessage respMsg.setVersion(contect.getVersion()) BatchProcessFilter.java Response Message MessageBody responseBody=new MessageBody(); reponseBody.setTargetURI("/1"); next filter: SessionFilter.java next filter: LegacyFilter.java if (data.getClass().isArray()) int paramLength=Array.getLength(data); //get the first object from array Object firstObj=Array.get(data,0); convert to ArrayList(); newParams=new ArrayList(); newParams.add(firstObj); next filter: flex.messaging.endpoints.amf.MessageBrokerFilter response: flex.messaging.endpoints.amf.SerializationFilter flex.messaging.io.MessageSerializer serializer=sc.newMessageSerializer(); serializer.initialize(sc, outBuffer, debugTrace); serializer.writeMessage(respMesg); flex.messaging.io.amf.AmfMessageSerializer.java Amf0Output amfOut amfOut.setAvmPlus(true); amfOut.writeShort(3); int headerCount=0; amfOut.writeShort(headerCount); int bodyCount=0; amfOut.writeShort(bodyCount); //1 //write the body String targetURI="/1/onStatus"; amfOut.writeUTF(targetURI); String responseURI=""; amfOut.writeURF(reponseURI); int UNKOWN_CONTENT_LENGTH=-1; amfOut.writeInt(UNKNOWN_CONTENT_LENGTH); amfOut.reset(); amfOut.writeObject(obj); obj: messages.ErrorMessage messages.AcknowledgeMessageExt messages.AcknowledgeMessage