[Red5] AMF3 support in trunk
Jalmari Raippalinna
jalmari.raippalinna at apaja.com
Fri Jan 26 09:14:46 EST 2007
Joachim Bauch kirjoitti:
> Hi all,
>
> the changes to support AMF3 are now merged in the trunk. Connecting
> from Flex2 applications therefore doesn't require setting the encoding
> to AMF0 on the NetConnections and the SOs any more.
>
> Joachim
As I finally got into testing AMF3, there is thing to I've noticed that
is not supported,
i have classes that implement IExternalizable, with writeExternal
that looks like this:
public function writeExternal(output:IDataOutput):void
{
trace("SERIALIZING SIMPLE OBJECT!");
output.writeUTF("DummyAction");
output.writeUTF("DummyType");
output.writeObject(new Object());
output.writeObject(new Object());
}
First, the remote class needs to be in bin directory of the server,
otherwise I get ClassNotFoundException, having resolved that I got
following error from this serialization:
[java] [INFO] 700536 SocketAcceptorIoProcessor-0.0:(
org.red5.io.amf3.Input.info ) Unknown datatype: 0
[java] [ERROR] 700536 SocketAcceptorIoProcessor-0.0:(
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.error ) Er
ror in packet at 0
[java] java.lang.IndexOutOfBoundsException: Index: 34, Size: 1
[java] at java.util.ArrayList.RangeCheck(ArrayList.java:547)
[java] at java.util.ArrayList.get(ArrayList.java:322)
[java] at org.red5.io.amf3.Input.readString(Input.java:190)
[java] at org.red5.io.amf.Input.readXML(Input.java:531)
[java] at
org.red5.io.object.Deserializer.deserialize(Deserializer.java:80)
[java] at org.red5.io.amf3.Input.readObject(Input.java:304)
[java] at
org.red5.io.object.Deserializer.deserialize(Deserializer.java:83)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeFlexMessage(RTMPProtocolDecoder.java:759)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeMessage(RTMPProtocolDecoder.java:439)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodePacket(RTMPProtocolDecoder.java:322)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decode(RTMPProtocolDecoder.java:154)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeBuffer(RTMPProtocolDecoder.java:116)
[java] at
org.red5.server.net.rtmp.codec.RTMPMinaProtocolDecoder.decode(RTMPMinaProtocolDecoder.java:60)
[java] at
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:157)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChai
n.java:785)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain$HeadFilter.messageReceived(AbstractIoFilterChain
.java:616)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.fireMessageReceived(AbstractIoFilterChain.java:3
52)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.java:288)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcessor.java:248)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor.access$500(SocketIoProcessor.java:49)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:540)
[java] at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:43)
[java] at java.lang.Thread.run(Thread.java:619)
[java] [ERROR] 700536 SocketAcceptorIoProcessor-0.0:(
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.error ) Er
ror decoding buffer
[java] org.red5.server.net.protocol.ProtocolException: Error during
decoding
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decode(RTMPProtocolDecoder.java:165)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeBuffer(RTMPProtocolDecoder.java:116)
[java] at
org.red5.server.net.rtmp.codec.RTMPMinaProtocolDecoder.decode(RTMPMinaProtocolDecoder.java:60)
[java] at
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:157)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChai
n.java:785)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain$HeadFilter.messageReceived(AbstractIoFilterChain
.java:616)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.fireMessageReceived(AbstractIoFilterChain.java:3
52)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.java:288)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcessor.java:248)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor.access$500(SocketIoProcessor.java:49)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:540)
[java] at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:43)
[java] at java.lang.Thread.run(Thread.java:619)
[java] [ERROR] 709302 SocketAcceptorIoProcessor-0.0:(
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.error ) Er
ror in packet at 0
[java] java.lang.NullPointerException
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeHeader(RTMPProtocolDecoder.java:362)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodePacket(RTMPProtocolDecoder.java:276)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decode(RTMPProtocolDecoder.java:154)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeBuffer(RTMPProtocolDecoder.java:116)
[java] at
org.red5.server.net.rtmp.codec.RTMPMinaProtocolDecoder.decode(RTMPMinaProtocolDecoder.java:60)
[java] at
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:157)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChai
n.java:785)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain$HeadFilter.messageReceived(AbstractIoFilterChain
.java:616)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.fireMessageReceived(AbstractIoFilterChain.java:3
52)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.java:288)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcessor.java:248)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor.access$500(SocketIoProcessor.java:49)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:540)
[java] at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:43)
[java] at java.lang.Thread.run(Thread.java:619)
[java] [ERROR] 709302 SocketAcceptorIoProcessor-0.0:(
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.error ) Er
ror decoding buffer
[java] org.red5.server.net.protocol.ProtocolException: Error during
decoding
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decode(RTMPProtocolDecoder.java:165)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeBuffer(RTMPProtocolDecoder.java:116)
[java] at
org.red5.server.net.rtmp.codec.RTMPMinaProtocolDecoder.decode(RTMPMinaProtocolDecoder.java:60)
[java] at
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:157)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChai
n.java:785)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain$HeadFilter.messageReceived(AbstractIoFilterChain
.java:616)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
[java] at
org.apache.mina.common.support.AbstractIoFilterChain.fireMessageReceived(AbstractIoFilterChain.java:3
52)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.java:288)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcessor.java:248)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor.access$500(SocketIoProcessor.java:49)
[java] at
org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:540)
[java] at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:43)
[java] at java.lang.Thread.run(Thread.java:619)
[java] [DEBUG] 719302 DefaultQuartzScheduler_Worker-7:(
com.apaja.server.invoke.Application.appDisconnect ) AppDisc
onnect
[java] [DEBUG] 719302 DefaultQuartzScheduler_Worker-7:(
com.apaja.server.invoke.Application.appLeave ) appLeave
And If I try to write the Strings as Object with writeObject:
[java] [DEBUG] 12703 SocketAcceptorIoProcessor-0.0:(
org.apache.commons.beanutils.BeanUtils.trace ) setProperty(c
om.apaja.server.invoke.TransferValueObject at 6f947b, , DummyAction)
[java] [ERROR] 12719 SocketAcceptorIoProcessor-0.0:(
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.error ) Err
or in packet at 0
[java] java.lang.RuntimeException: Class references not supported yet.
[java] at org.red5.io.amf3.Input.readObject(Input.java:283)
[java] at
org.red5.io.object.Deserializer.deserialize(Deserializer.java:83)
[java] at org.red5.io.amf3.Input.readArray(Input.java:244)
[java] at
org.red5.io.object.Deserializer.deserialize(Deserializer.java:74)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeFlexMessage(RTMPProtocolDecoder.java:759)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeMessage(RTMPProtocolDecoder.java:439)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodePacket(RTMPProtocolDecoder.java:322)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decode(RTMPProtocolDecoder.java:154)
[java] at
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeBuffer(RTMPProtocolDecoder.java:116)
[java] at
org.red5.server.net.rtmp.codec.RTMPMinaProtocolDecoder.decode(RTMPMinaProtocolDecoder.java:60)
.... Clip
Hope this helps to find out the problem,
Jalmari
ps. How can I get the java classes to use custom deserialization /
serialization?
More information about the Red5
mailing list