0

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

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

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

基本结构与此类似(我已经尝试过简化了很多):

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

通用模块 (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;
    }
}
4

3 回答 3

1

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

于 2011-04-29T09:45:09.793 回答
1

我实际上不得不这样做,你可以去这里,获取 BlazeDS 的源代码,将它添加到你的项目中并调试到你想要的内容。

于 2011-04-29T14:09:29.160 回答
0

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

尝试将通用模块 JAR 放在 Flex 模块战争中意味着在部署时将{通用模块}.jar放在{BlazeDS}\WEB-INF\lib\中

如果它不存在。

希望它有效

于 2011-04-29T09:51:37.313 回答