我有一个多模块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;
}
}
答案 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
如果不在那里。
希望它有效