【问题标题】:Unsupported AMF version不支持的 AMF 版本
【发布时间】:2013-11-10 09:08:23
【问题描述】:

我遇到了以下异常:

[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。当我查看放入版本 3.2BlazeDS 的修复程序时,它看起来像版本 1 is converted to 0 (AMF1 to AMF0)。除了0, 1 and 3 (AMF0, AMF1 and AMF3 respectively) 之外的任何其他版本都会抛出上面看到的异常。

有人知道是什么导致了这个异常吗? (我并不是说 BlazeDS 会抛出异常,我明白了。)我要问的是为什么版本是 4660 而不是 0 或 3。

【问题讨论】:

  • 您何时何地收到此异常?启动时?或者在向/从 Flex 拨打电话时?
  • @avijendr 我在拨打电话时收到此消息。这不是在启动时发生的事情。
  • 谢谢。我会试试这个并告诉你。
  • 请看我对问题stackoverflow.com/questions/31824589/…的回答

标签: java apache-flex blazeds amf


【解决方案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;
        }

【讨论】:

  • 你没有回答我的问题。我知道抛出了异常。我的问题不是异常来自哪里,而是为什么 AMF 版本是这样的。有任何想法吗?我在想这是通过网络发送数据期间的某种帧偏移。
猜你喜欢
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 2018-02-15
  • 2012-08-22
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
相关资源
最近更新 更多