2011-04-29 111 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