我正在尝试将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%使用相同的目的地/频道。
答案 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#等效对象缺少公共无参数构造函数。