我有两个相同的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。我想知道如何解决这个问题。感谢。
答案 0 :(得分:1)
通常的方法是让一个类具有type属性,然后根据类型决定做什么。
就BlazeDS行为而言:这里确实没有足够的信息可以确定,但是如果你有一个java方法调用,返回的对象将始终是相同的类型。如果你有一个名为getEvent()的方法返回一个sheduledEvent对象,那么它总是会返回一个scheduledEvent对象。如果你有两个方法调用 - getScheduledEvent()和getStartEvent() - 那么你可以在flex端有不同的响应者并在那里开始你不同的逻辑。