Flex + BlazeDS + Multi模块maven项目

时间:2011-04-29 09:36:02

标签: flex maven-2 blazeds flexmojos

我有一个多模块Maven项目(大约10个模块),其中2个模块是flex项目及其相应的服务器项目,通过BlazeDS进行通信。

服务器模块依赖于包含公共事物的另一个模块,在整个项目中共享。使用公共模块中的对象时,对象不会被序列化并通过AMF发送到SWF。服务器模块中的所有内容都是序列化的,并且工作正常,但公共模块中的对象(在服务器端具有有效值)不会发送到客户端。

我正在使用Flexmojos来构建它。我需要做些什么才能使公共项目中的类可用于序列化,并且能够在swf项目中将它们用作RemoteClass对象?

基本结构与此类似(我试过这样简化它):

swf-module(Flex):

Class MyObject.as:

package swf.model {

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

Class MyCommonObject.as:

package swf.model {

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

服务器模块(Java):

Class 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;
    }
}

通用模块(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 个答案:

答案 0 :(得分:1)

Java服务器端DTO和ActionScript客户端DTO是独立的。我的意思是以下。当BlazeDS服务返回AMF序列化DTO时,它们的二进制结构由AMF格式描述。 AMF传输数据包含您使用RemoteClass元数据在客户端描述的完整类路径。通过这种方式,客户端Flex项目和Java服务器项目在构建过程中彼此之间没有依赖关系。但您可以将它们组合在一起以生成包含客户端和服务器部分的相同WAR。

答案 1 :(得分:1)

我实际上必须这样做,you can go here, get the source for BlazeDS,将它添加到您的项目中并调试您心中的内容。

答案 2 :(得分:0)

我认为您的通用模块JAR不在Flex模块/ WAR / BlazeDS的类路径中,

尝试将常用模块JAR放入Flex模块中 表示部署中 {BlazeDS} \ WEB-INF \ lib \ 中的 {common module} .jar

如果不在那里。

希望它有效