【问题标题】:Java, BlazeDS, Flex - Error #10566: Cannot create property smallMessage on AcknowledgeMessage?Java、BlazeDS、Flex - 错误 #10566:无法在 AcknowledgeMes​​sage 上创建属性 smallMessage?
【发布时间】:2011-10-28 13:50:43
【问题描述】:

我有一个正常工作的 Flex/Java 应用程序,但如果我退出 channelSet 并重新登录,在调试控制台中我会看到很多此错误的实例:

ReferenceError: Error #1056: Cannot create property smallMessage on mx.messaging.messages.AcknowledgeMessage.

错误本身似乎不会干扰应用程序。

AcknowledgeMessage 类不是我的类——我不知道为什么 Java 端和 Flex 端在其内部类的属性方面不匹配。

感谢任何帮助。

版本:

  • Flex 4.1.0.16076
  • BlazeDS 4.0.0.14931
  • Spring-Flex 1.5.0.RELEASE

【问题讨论】:

  • 您使用的是什么版本的 Flex 和 BlazeDS?
  • 添加到上面的原始问题。

标签: java actionscript-3 apache-flex blazeds amf


【解决方案1】:

我们在应用程序中遇到了完全相同的问题。我已经设法使用以下丑陋的 hack 隐藏错误。

首先,像这样创建一个类:

public class FixedAcknowledgeMessage extends AcknowledgeMessage {
    private var _smallMessage : *;

    public function FixedAcknowledgeMessage() { }

    public function get smallMessage() : * {
        return _smallMessage;
    }

    public function set smallMessage(value : *) : void {
        _smallMessage = value;
    }   
}

然后,在您的启动代码中,将 AcknowledgeMes​​sage 替换为您的固定代码:

registerClassAlias("flex.messaging.messages.AcknowledgeMessage", FixedAcknowledgeMessage);

我们也对 ErrorMessage 和 AsyncMessage 类做了同样的修改,它们似乎遇到了同样的问题。我不知道这个 hack 是否会产生一些负面影响,我很想找到一个更合适的解决方法。

【讨论】:

  • 这个 smallMessage 到底是什么?
  • 非常好的问题。 AcknowledgeMes​​sage 的 java 实现将其作为属性,而 as3 实现则没有。我猜 BlazeDS 是这里的罪魁祸首……
  • 当您在 AMF 中发送一个对象时,该类的所有属性都必须以字符串的形式列出,以便反序列化器知道如何反序列化它。但是,BlazeDS 有一些符合 IExternalizable 的 AcknowledgeMes​​sage,并且始终以相同的顺序发送属性,因此它可以跳过发送属性名称。 smallMessage 设置器是标准 AcknowledgeMes​​sage 和压缩设置器之间转换的一部分,尽管您遇到异常的原因超出了我的范围。
  • 如果可以创建一个完全工作的应用程序来重现该问题,我会看看它,它可能是一个真正的错误。我的雅虎电子邮件帐户是cornelcreanga。
【解决方案2】:

不要使用与表名中使用的主键相同的名称... 使用不同的名称...... 比如……

VO 对象...

public class ColumnNameVO
{    
    public var ifId:int;
    public var formatId:int;
    public var position:int;
    public var name:String;  
    public function ColumnNameVO() { }
}

表 pojo 类:

public class ColumnNameVO
{
    public var Id:int;
    public var formatId:int;
    public var position:int;
    public var name:String;  

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多