apache-flex 不支持的AMF版本

kfgdxczn  于 2022-11-01  发布在  Apache
关注(0)|答案(1)|浏览(182)

我遇到了以下异常:

[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)

我使用的是BlazeDS3.0.0.544版本,虽然我发现有多个帖子讨论升级到3.2版本以解决类似的问题,我不认为这是正确的解决我的问题。我发现的帖子谈到看到不支持的版本1。当我看到BlazeDS3.2版本中的修复时,它看起来像1 is converted to 0 (AMF1 to AMF0)版本。除了0, 1 and 3 (AMF0, AMF1 and AMF3 respectively)之外的任何其他版本都会抛出上述异常。
有人知道是什么导致了这个异常吗?(我并不是说BlazeDS抛出了一个异常,我明白了。)我想问的是为什么版本是4660而不是0或3。

2ledvvac

2ledvvac1#

您是否从源代码管理 checkout 了Blazeds的最新版本?
我看了一下代码,对我来说,这看起来像是他们代码中的一个bug。再往下看,寻找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;
        }

相关问题