Apache flex TypeError:错误#1034:类型强制失败:无法转换Object@1456c7b9到mx.messaging.messages.IMessage

Apache flex TypeError:错误#1034:类型强制失败:无法转换Object@1456c7b9到mx.messaging.messages.IMessage,apache-flex,flash,actionscript-3,casting,Apache Flex,Flash,Actionscript 3,Casting,我正在尝试将Flash客户端连接到BlazeDS。其他使用vanilla BlazeDS设置的用户在这方面取得了一些成功。然而,我正在使用springsource提供的新的SpringBlazeDS集成并搁浅。 flash客户端实际上似乎在工作,因为我可以在返回对象的主体中看到正确的数据,但是由于未知的原因,它无法作为IMessage进行转换。它在此行轮询Channel.as失败,主题行错误 var messageList:Array = msg.body as Arra

我正在尝试将Flash客户端连接到BlazeDS。其他使用vanilla BlazeDS设置的用户在这方面取得了一些成功。然而,我正在使用springsource提供的新的SpringBlazeDS集成并搁浅。 flash客户端实际上似乎在工作,因为我可以在返回对象的主体中看到正确的数据,但是由于未知的原因,它无法作为IMessage进行转换。它在此行轮询Channel.as失败,主题行错误

            var messageList:Array = msg.body as Array;
            for each (var message:IMessage in messageList)  <--

我有一个flex客户端,它在相同的目的地/频道上100%工作。

标题中的错误意味着您出于某种原因获得了一个对象,该对象没有实现或扩展IMessage接口,因此循环无法在此部分强制转换它:

for each (var message:IMessage in messageList){
您应该以某种方式确保不添加任何未扩展或实现IMessage的内容,或者检查变量是否实际为ext./imp.it。此外-如果您想这样做,您必须更改每个的设置,如下所示:

for each (var obj in messageList){
    if (obj is IMessage){
        var message:IMessage = obj as IMessage;
        // DO STUFF HERE
    }
}

添加此对象映射:

registerClassAlias("flex.messaging.io.ObjectProxy", ObjectProxy); 

如果在Java VO对象上重写了hashcode()方法,则可能会发生这种情况

删除hashcode()覆盖(如果可以)


查看我的博客,了解我是如何发现这一点的

我在尝试将actionscript对象发送到后端时遇到了相同的错误。我的问题是,我的c#等价对象缺少一个公共无参数构造函数

,感谢您的响应。此代码位于FlexSDK的rpc部分。这是否意味着要为此问题编译一个新版本的rpc.swc。如果是在这样的SDK中,则不是错误。只需确保不要在“messageList”(即,传递给SDK函数的某个参数)中添加任何不扩展或实现IMessage接口的内容。是否存在“test”方法采用IMessage而不是MessageEvent的原因?请注意,不鼓励这样做,因此答案应该是搜索解决方案的终点(相对于另一个引用的停顿,它会随着时间的推移而变得陈旧)。请考虑在这里添加一个独立的概要,保持链接作为引用。
registerClassAlias("flex.messaging.io.ObjectProxy", ObjectProxy);