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

时间:2010-11-21 05:36:17

标签: flex flash actionscript-3 casting

我正在尝试将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
    }

我有一个灵活的客户端,100%使用相同的目的地/频道。

4 个答案:

答案 0 :(得分:2)

标题中的错误意味着您由于某种原因得到了一个没有实现或扩展 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
    }
}

答案 1 :(得分:0)

添加此对象映射:

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

答案 2 :(得分:0)

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

删除hashcode()覆盖(如果可以的话)。

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

答案 3 :(得分:0)

当尝试将动作脚本对象发送到后端时,我遇到了相同的错误。我的问题是我的C#等效对象缺少公共无参数构造函数