不支持的AMF版本

时间:2013-10-30 16:17:20

标签: java flex blazeds amf

我遇到了以下异常:

[BlazeDS] Unsupported AMF version 4,660. 
flex.messaging.MessageException: Unsupported AMF version 4,660. 
at flex.messaging.io.amf.AmfMessageDeserializer.readMessage(AmfMessageDeserializer.java:93) 
at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:114) 
at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:274) 
at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:377) 

我使用3.0.0.544的{​​{1}}版本,虽然我发现有多篇帖子谈到升级到版本BlazeDS以解决类似问题,但我认为不是这是我的问题的正确解决方案。我发现的帖子谈到了看到不受支持的版本1.当我查看3.2 3.2版本的修补程序时,它看起来像版本BlazeDS1 is converted to 0 (AMF1 to AMF0)旁边的任何其他版本都会抛出上述异常。

有人知道可能导致此异常的原因吗? (而且我并不是说BlazeDS抛出异常,我明白了。)我问的是为什么版本是4660而不是0或3。

1 个答案:

答案 0 :(得分:1)

您是否从源代码管理中查看了最新版本的Blazeds?

我查看了代码,对我而言,它看起来像是代码中的错误。进一步查看并查找 LOOK_HERE 。这种情况对我来说似乎不可能?为什么不下载此代码并将其添加到您的项目中,注释掉该条件并查看会发生什么。

以下代码来自AmfMessageDeserializer.java

int version = amfIn.readUnsignedShort();

        // Treat FMS's AMF1 as AMF0.
        if (version == MessageIOConstants.AMF1)
            version = MessageIOConstants.AMF0; 

// <LOOK_HERE>
if (version != MessageIOConstants.AMF0 && version != MessageIOConstants.AMF3)
        {
            //Unsupported AMF version {version}.
            MessageException ex = new MessageException();
            ex.setMessage(UNSUPPORTED_AMF_VERSION, new Object[] {new Integer(version)});
            ex.setCode(CODE_VERSION_MISMATCH);
            throw ex;
        }