BlazeDS无法正确映射AS对象

时间:2011-03-25 18:18:20

标签: java flex serialization mapping blazeds

我有两个相同的java类(想象一下getter和setter):

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

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

在弹性方面,我有相应的对象:

[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对象,但一旦到达flex端(通过BlazeDS),它就变成了一个StartEvent ......

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

有没有人知道为什么会发生这种情况以及如何解决这个问题?

感谢。

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

1 个答案:

答案 0 :(得分:1)

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

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