Как я получаю набор со строгим контролем типов от BlazeDS?

Я выставил боб Spring своему приложению Flex через BlazeDS. В моем коде Java я возвращаю списки со строгим контролем типов. например.

public List<Folder> getFolders(String path) {
    return dao.getFolders(path);
}

Приложение Flex получает данные как ArrayCollection Экземпляров объектов AS3 - т.е. не как ArrayCollection Папок, который является тем, что я хочу. Я аннотировал свой класс Flex следующим образом:

package myproject.vo {
    import com.adobe.cairngorm.vo.IValueObject;
    import mx.collections.ArrayCollection;

    [Bindable]
    [RemoteClass(alias="myproject.vo.Folder")]
    public class Folder extends PersistentObject implements IValueObject {
        public function Folder() {}
    }
}

Я проверил, что у меня были методы считывания/методы set на моем классе Папки Java для соответствия свойствам в моем классе Папки Flex. Какие-либо идеи?

6
задан Stu Thompson 19 November 2009 в 08:01
поделиться

4 ответа

Я наконец решил эту проблему после небольшого поиска в Google. Вот правила удаленного взаимодействия Flex, которые я обнаружил:

  1. Добавьте аннотацию к объекту значения Flex, чтобы указать класс Java, к которому он относится. Это важно, если имя пакета отличается. - например, [Bindable] [RemoteClass (alias = ”package.JavaClass”)] открытый класс FlexClass {}

  2. Конструкторы ДОЛЖНЫ совпадать в объектах значений Flex и Java. В итоге я решил использовать общедоступные конструкторы без аргументов, чтобы не усложнять задачу.

  3. Геттеры и сеттеры ДОЛЖНЫ соответствовать объектам значений Flex и Java.

  4. Последнее правило - взломщик - вы ДОЛЖНЫ создавать экземпляры любых классов, которые вам нужны. десериализовать в. На первый взгляд, это не должно быть проблемой, однако я потратил дни, пытаясь десериализовать результаты удаленного вызова getObjectsAtPath () - список объектов PersistentObject, содержащих экземпляры Folder и Document (оба являются подклассами PersistentObject). Если вы явно не создаете экземпляр класса (в моем случае - класса Folder), он НЕ включается в SWF-файл (в отличие от Java)! В конце концов я создаю фиктивную переменную типа Folder, чтобы обойти это.

Спасибо всем за ваши предложения.

11
ответ дан 9 December 2019 в 22:36
поделиться
​​

Дженерики Java удаляются во время компиляции. JVM не набирает коллекции во время выполнения. В любом случае, я не вижу вашего вызывающего кода, но он должен помещать возвращаемое значение из java в переменную, которая объявлена ​​примерно так:

folders:ArrayCollection.<String>
0
ответ дан 9 December 2019 в 22:36
поделиться

Я просматриваю весь свой серверный код и могу ' Не помню, было ли это необходимо или нет, но на стороне Java я объявляю возвращаемые значения как строго типизированные списки:

public List<Folder> getFolders(String path) { 
    return dao.getFolders(path); 
}
0
ответ дан 9 December 2019 в 22:36
поделиться

Вы упомянули, что ваш класс Folder сложен; означает ли это, что он содержит ссылки на другие объекты? В этом случае вам не нужно сопоставлять все остальные классы (и проверять сеттеры / геттеры, особенно для логических)?

0
ответ дан 9 December 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: