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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TypeError:错误#1034:类型强制失败:无法将Object @ 1456c7b9转换为mx.messaging.messages.IMessage相关的知识,希望对你有一定的参考价值。

我试图将Flash客户端连接到BlazeDS。其他人使用vanilla BlazeDS设置取得了一些成功。但是我正在使用springource的新Spring BlazeDS集成并搁浅。 Flash客户端实际上似乎正在工作,我可以在返回的对象的主体中看到正确的数据,但由于某种原因未知它无法作为IMessage进行转换。它在主题行错误的此行上的PollingChannel.as失败

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

在应用程序加载时,我注册了一大堆类,如此

registerClassAlias(“flex.messaging.messages.RemotingMessage”,RemotingMessage); registerClassAlias(“mx.messaging.messages.IMessage”,IMessage);等等..

我的代码基本上是

        var channelSet:mx.messaging.ChannelSet = new mx.messaging.ChannelSet();
        var channel:mx.messaging.channels.AMFChannel = new AMFChannel("my-amf", "http://localhost:8400/SpringA/messagebroker/amf");
        channelSet.addChannel(channel);

        var consumer:mx.messaging.Consumer = new Consumer();
        consumer.channelSet = channelSet;
        consumer.destination = "simple-feed";
        consumer.subscribe();
        consumer.addEventListener(MessageEvent.MESSAGE, test);


    private function test(event:IMessage)
    {
        trace("msg..");
        // breakpoint never makes it here
    }

我有一个Flex客户端100%使用相同的目标/通道。

答案

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

for each (var message:IMessage in messageList){

您应该以某种方式确保不添加任何未扩展或实现IMessage的内容,或检查变量IS是否实际为ext./imp。它。另外 - 如果你想这样做,你将不得不像这样改变每个:

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()覆盖(如果可以)。

有关我如何发现这一点的背景故事,请参阅我的博客。 http://squaredi.blogspot.com/2013/12/remoting-landmine-without-stack-trace.html

另一答案

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

以上是关于TypeError:错误#1034:类型强制失败:无法将Object @ 1456c7b9转换为mx.messaging.messages.IMessage的主要内容,如果未能解决你的问题,请参考以下文章

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

TypeError: Error #1034: 强制转换类型失败:无法将 flash.events::MouseEvent@73b7cc1 转换为 mx.events.ItemClickEvent。(

AS3 Flash中的类型强制

AS3 Flash 中的类型强制

类型错误:defineCall 不是函数。要求()失败

删除movieclip子项的动作脚本