Flex + BlazeDS + мультимодельный проект Maven - PullRequest
0 голосов
/ 29 апреля 2011

У меня есть многомодульный проект Maven (около 10 модулей), где 2 модуля представляют собой проект flex и соответствующий ему серверный проект, взаимодействующий через BlazeDS.

Серверный модуль зависит от другого модуля.содержащие общие вещи, поделенные по всему проекту.При использовании объектов из общего модуля объекты не сериализуются и не отправляются через AMF в SWF.Все в серверном модуле сериализуется и работает нормально, но объекты из общего модуля (который имеет допустимые значения на стороне сервера) не отправляются клиенту.

Я использую Flexmojos для сборкиэтот.Что мне нужно сделать, чтобы сделать классы в общем проекте доступными для сериализации и иметь возможность использовать их в качестве объектов RemoteClass в моем swf-проекте?

Базовая структура похожа на эту (I 'мы постарались так немного упростить):

swf-модуль (Flex):

Класс MyObject.as:

package swf.model {

    [RemoteClass(alias="server.model.MyObject")]
    public class MyObject {
        public var name:String;
        public var common:MyCommonObject;
    }
}

Класс MyCommonObject.as:

package swf.model {

    [RemoteClass(alias="common.model.MyCommonObject")]
    public class MyCommonObject {
        public var commonNumber:Number;    }
}

сервер-модуль (Java):

Класс MyObject.java:

package server.model;

import common.model.MyCommonObject;

public class MyObject {
    private String name;   
    private MyCommonObject common;

    public MyObject() {}

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public MyCommonObject getCommon() {
        return common;
    }
    public void setCommon(MyCommonObject common) {
        this.common= common;
    }
}

common-module (Java)

Класс MyCommonObject.java:

package common.model;

public class MyCommonObject{
    private Double commonNumber;

    public MyCommonObject() {}

    public Double getCommonNumber() {
        return commonNumber;
    }
    public void setCommonNumber(Double commonNumber) {
        this.commonNumber= commonNumber;
    }
}

Ответы [ 3 ]

1 голос
/ 29 апреля 2011

Я действительно должен был это сделать, Вы можете пойти сюда, получить исходный код BlazeDS , добавить его в свой проект и отладить до глубины души.

1 голос
/ 29 апреля 2011

DTO на стороне сервера Java и DTO клиента ActionScript независимы.Я имею в виду следующее.Когда ваши службы BlazeDS возвращают DTO с сериализацией AMF, их двоичная структура описывается в формате AMF.А данные передачи AMF содержат полный путь к классу, который вы описываете на стороне клиента с помощью метаданных RemoteClass.Таким образом, клиентский проект Flex и проект сервера Java не зависят друг от друга в процессе сборки.Но вы можете собрать их вместе, чтобы создать один и тот же WAR-файл, содержащий как клиентскую, так и серверную часть.

0 голосов
/ 29 апреля 2011

Я думаю, что ваш JAR общего модуля не находится в classpath модуля Flex / WAR / BlazeDS,

попробуйте включить общий JAR модуля в модули Flex военного средства PUT {common module} .jar в {BlazeDS} \ WEB-INF \ lib \ при развертывании

, если его там нет.

Надеется, что это работает

...