2011-03-25 80 views
0

我有相同(想象getter和setter)2 Java类:BlazeDS的未映射AS对象正确

class ScheduledEvent { 
    private String eventName; 
    private List<eventValues> values;  
} 

class StartEvent { 
    private String eventName; 
    private List<eventValues> values;  
} 

在Flex端,我有相应的对象:

[RemoteClass(alias="com.project.events.ScheduledEvent")] 
public class ScheduledEvent { 
    public var eventName:String; 
    public var values:ArrayCollection; 
} 

[RemoteClass(alias="com.project.events.StartEvent")] 
public class StartEvent{ 
    public var eventName:String; 
    public var values:ArrayCollection; 
} 

现在有两个相同的类的原因。当某些东西是“预定的”时,我应该得到ScheduleEvent对象,并且当一个事件开始时,我应该得到StartEvent对象。根据我回来的对象,我做了不同的事情。

我的问题是,在后端,它会送我ScheduleEvent对象,但一旦到了弹性侧(通过BlazeDS的),它成为一个StartEvent ....

起初,我认为这是因为这两个事件具有完全相同的变量,所以我尝试通过添加一个虚拟变量(String foobar)来改变ScheduledEvent,但这似乎没有什么区别。

有没有人有任何想法,为什么发生这种情况,我怎么能解决它?

谢谢。

编辑: 我应该提到,我没有使用java方法调用...我使用BlazeDS消息系统。这就是为什么我不使用“一个响应者的一个Java方法调用”方法。所以,在message.body中,我应该得到ScheduledEvent,但我一直收到StartEvent。我想知道是否这是因为两个对象具有相同的属性,BlazeDS不知道如何正确映射它们......我甚至在java服务层中放置了一个断点,以确保正在发送适当的对象但是在BlazeDS序列化并将其反序列化到flex侧时,它现在成为StartEvent。我想知道如何解决这个问题。谢谢。

+1

你忘了在'alias =“com.project.events.scheduledEvent”''中大写's'吗? – Jeremy 2011-03-25 18:28:27

+0

不......它在那里......当我在StackOverflow中输入时,缺少的“s”只是一个错字......我现在会修复它,尽管...感谢您指出它。 – LazerWonder 2011-03-25 19:56:42

回答

1

通常的做法是让一个类拥有一个类型属性,然后根据类型决定要做什么。

就BlazeDS行为而言:这里没有足够的信息来确定知道,但如果您有一个java方法调用,返回的对象将始终是相同的类型。如果你有一个名为getEvent()的方法返回一个sheduledEvent对象,那么它总是返回一个scheduledEvent对象。如果你有两个方法调用 - getScheduledEvent()和getStartEvent() - 那么你可以在弹性方面有不同的响应者,并在那里开始你不同的逻辑。

+0

是 - 一个事件响应者...但是,在这种情况下,服务器通过BlazeDS发送消息。所以,服务器通过通道发送消息,而message.body应该是ScheduledEvent,但我不断收到StartEvent。我甚至在服务器端代码上放了一个断点,并且在消息通道中发送了一个ScheduledEvent,但是到了Flex端时,它就变成了StartEvent。 希望这会消除混乱。我应该提到我使用的消息系统。 – LazerWonder 2011-03-28 16:30:16