2011-04-29 5 views
0

У меня есть проект Maven с несколькими модулями (около 10 модулей), где 2 из модулей - проект flex и соответствующий ему серверный проект, сообщающийся через BlazeDS.Flex + BlazeDS + Multi модуль maven project

Серверный модуль зависит от другого модуля, содержащего общие вещи, разделяемого по всему проекту. При использовании объектов из общего модуля объекты не сериализуются и отправляются через AMF в SWF. Все в серверном модуле сериализуется и работает нормально, но объекты из общего модуля (который имеет допустимые значения на стороне сервера) не отправляются клиенту.

Я использую Flexmojos для его создания. Что мне нужно сделать, чтобы сделать классы в общем проекте доступными для сериализации и быть в состоянии использовать их как объекты RemoteClass в моем SWF-проекте?

Основная структура похожа на это (я пробовал так упростить его совсем немного):

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

Можете ли вы поделиться своим pom.xml для этого. В настоящее время я пытаюсь привить проект flex и столкнуться с какой-то борьбой, как вы это делали. –

+1

Извините, не могу передать pom.xml, поскольку он содержит много материала, который не должен быть общедоступным.Эта конкретная проблема была решена путем отказа от common.model.MyCommonObject в классе MyCommonObject.as. Вместо этого я создал подкласс common.model.MyCommonObject в server.model и вместо этого был добавлен к этому подклассу из ActionScript. – thorseye

+0

Спасибо, что вернулись ко мне. На моем длинном пути к maven я забыл точно, что решило эту проблему для меня, но я уверен, что у меня просто не было подходящих банок/зависимостей. –

ответ

1

Части DTO на стороне сервера Java и DTO от ActionScript независимы. Я имею в виду следующее. Когда ваши службы BlazeDS возвращают AMO-сериализованные DTO, их двоичная структура описывается форматом AMF. И данные переноса AMF содержат полный путь к классам, который вы описываете на стороне клиента, используя метаданные RemoteClass. Таким образом, проект клиента Flex и проект сервера Java не зависят друг от друга по мере создания. Но вы можете собрать их вместе для создания той же WAR, которая содержит как клиентскую, так и серверную часть.

+0

Хорошо. Поэтому я предполагаю, что проблема заключается в том, что служба BlazeDS сериализует DTO. Как я могу отладить, что происходит, когда происходит сериализация AMF? – thorseye

+0

У вас есть исключения на стороне сервера? – Constantiner

+0

Из того, что я могу сказать, сервер не выбрасывает исключения. Функция, которая вызывается через RemoteObject в ActionScript, возвращает пользовательский объект, и все свойства, которые находятся в серверном модуле, отправляются правильно. Это только одно свойство, основанное на классе в общем модуле, который не отправлен правильно. – thorseye

0

Я думаю, ваш общий-модуль JAR не в пути к классам Flex модуля/WAR/BlazeDS,

попытки поставить общий модуль JAR в Flex модулей войны средства PUT {общего модуля} .jar в {BlazeDS} \ WEB-INF \ lib \ при развертывании

если его нет.

Надеется он работает

+0

{common.jar} размещен в {server.war} \ WEB-INF \ lib \ {common.jar}, поэтому я не думаю, что это проблема. Объект заполняется на сервере, но не сериализован правильно. Любые другие идеи? – thorseye

+0

У вас есть какие-либо ошибки на сервере + Используете ли вы какой-либо пользовательский тип в DTO – Imran

+0

(я пишу почти то же, что и для Constantiner). Да, это обычная DTO. Из того, что я могу сказать, сервер не выбрасывает исключения. Функция, которая вызывается через RemoteObject в ActionScript, возвращает пользовательский объект, и все свойства, которые находятся в серверном модуле, отправляются правильно. Это только одно свойство, основанное на классе в общем модуле, который не отправлен правильно. – thorseye