Как заставить преобразование имени BlazeDS работать для свойств, начинающихся со строчной буквы, за которой следует заглавная?

#apache-flex #actionscript-3 #blazeds #amf

#apache-flex #actionscript-3 #blazeds #amf

Вопрос:

У меня возникли некоторые проблемы с преобразованием, применяемым 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: Ошибка # 1056: не удается создать свойство XRatio в as.pkg.Example.

Почему BlazeDS не преобразует там X из XRatio? Как я могу избежать этого?

Ответ №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;
        }
    }
}
  

Приветствия

Комментарии:

1. На самом деле это хорошо работает, если я использую xratio в ActionScript и getXratio() в Java, даже если это не совсем одно и то же имя. BlazeDS хорошо справляется со свойствами, начинающимися со строчной буквы в AS и с заглавной буквы в Java, что является классическим соглашением об именовании, но не в случае, описанном выше.