2011-04-29 110 views
0

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

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

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

的基本结构与此类似(I一直如此简化它相当多的):

SWF模块(柔性):

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

服务器模块(爪哇):

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

共模块(爪哇)

类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

你能分享你的pom.xml吗?我目前正在努力修复一个flex项目,并且像你一样面对一些困难。 – 2013-10-08 10:07:15

+1

对不起,无法共享pom.xml,因为它包含许多不应公开的内容。这个特定的问题是通过不重新调用MyCommonObject.as类中的common.model.MyCommonObject来解决的。相反,我在server.model中创建了common.model.MyCommonObject的子类,并将其从Actionscript转换为该子类。 – thorseye 2013-10-08 13:24:10

+0

感谢您回复我。在漫长的工作之路上,我忘记了为我解决了这个问题,但我确信我没有正确的罐子/依赖关系。 – 2013-11-04 16:35:33

回答

1

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

+0

好的。所以我猜这个问题是BlazeDS服务序列化DTO的时候。如何在真正的AMF序列化发生时调试出错? – thorseye 2011-04-29 12:12:49

+0

服务器端有没有例外? – Constantiner 2011-04-29 12:17:29

+0

从我可以告诉服务器抛出没有例外。在Actionscript中通过RemoteObject调用的函数返回一个自定义对象,并且服务器模块中的所有属性都会正确发送。它只是一个基于公共模块中的类未正确发送的属性。 – thorseye 2011-04-29 12:25:56

0

我觉得你的共同模块JAR是不是在Flex的模块/ WAR/BlazeDS的程序的CLASSPATH,

试图把通用模块JAR中的Flex组件战争 手段PUT {通用模块}的.jar {BlazeDS} \ WEB-INF \ lib \部署时

如果不存在。

公司希望它的工作原理

+0

{common.jar}被放置在{server.war} \ WEB-INF \ lib \ {common.jar}中,所以我不认为这是问题所在。该对象在服务器端填充,但没有正确序列化。任何其他想法? – thorseye 2011-04-29 12:11:20

+0

服务器上是否有任何错误+您是否使用DTO – Imran 2011-04-29 12:18:18

+0

中的任何自定义类型(我写的与Constantiner几乎相同)。是的,这是一个自定义的DTO。从我可以告诉服务器抛出没有例外。在Actionscript中通过RemoteObject调用的函数返回一个自定义对象,并且服务器模块中的所有属性都会正确发送。它只是一个基于公共模块中的类未正确发送的属性。 – thorseye 2011-04-29 12:26:22