2011-06-06 35 views
2

当这个名字以小写字母后跟一个大写字母开头时,BlazeDS应用于属性名称的转换遇到了一些麻烦。如何使BlazeDS名称转换适用于以小写字母开头且后面带有大写字母的属性?

我有类似这样的ActionScript类:

package as.pkg { 

    [RemoteClass(alias="java.pkg.Example")] 
    public class Example { 
     private var mXRatio:Number; 

     public function get xRatio():Number { 
      return mXRatio; 
     } 

     public function set xRatio(r:Number):void { 
      mXRatio = r; 
     } 
    } 
} 

然后,我必须在服务器上相当于Java类:

package java.pkg; 

public class Example { 
    private Double mXRatio; 

    public Double getXRatio() { 
     return mXRatio; 
    } 

    public void setXRatio(Double r) { 
     mXRatio = r; 
    } 
} 

发送实例从ActionScript到Java工作完全正常。但是,当实例从Java发送到ActionScript时,会显示以下错误:

ReferenceError: Error #1056: Cannot create property XRatio on as.pkg.Example.

为什么BlazeDS的不转换XRatio存在的X?我怎样才能避免这种情况?

回答

1

BlazeDS在序列化时使用反射将值注入到属性中。

因此,您的属性(公共getter/setter对或公共变量)必须具有完全相同的名称,否则将出现序列化错误,如上面所述。

试试这个,它应该是罚款:

package as.pkg { 

    [RemoteClass(alias="java.pkg.Example")] 
    public class Example { 
     private var mXRatio:Number; 

     public function get XRatio():Number { //uppercase X i.s.o lowercase x 
      return mXRatio; 
     } 

     public function set XRatio(r:Number):void { //uppercase X i.s.o lowercase x 
      mXRatio = r; 
     } 
    } 
} 

干杯

+0

其实它工作得很好,如果我在ActionScript和'getXratio()使用''xratio'在Java中,即使这不是完全相同的名称。 BlazeDS可以很好地处理以AS中的小写字母开头的属性和Java中的大写字母,这是一种经典的命名约定,但在上述情况下不适用。 – Julien 2011-06-06 11:27:35

相关问题