BlazeDS неправильно отображает объекты AS - PullRequest
0 голосов
/ 25 марта 2011

У меня есть 2 одинаковых java-класса (представьте геттеры и сеттеры):

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, но как только он попадет на гибкую сторону (через BlazeDS), он станет StartEvent ....

Сначала я подумал, что это связано с тем, что эти два события имеют абсолютно одинаковые переменные, поэтому я попытался изменить ScheduledEvent, добавив фиктивную переменную (String foobar), но, похоже, это не имело значения.

Кто-нибудь знает, почему это происходит и как я могу это исправить?

Спасибо.

EDIT: Я должен упомянуть, что я не использую вызов метода Java ... Я использую систему обмена сообщениями BlazeDS. Вот почему я не использую подход «один вызов Java для одного респондента». Итак, в message.body я должен получить ScheduledEvent, но я продолжаю получать StartEvent. Мне интересно, если это потому, что два объекта имеют одно и то же свойство, а BlazeDS не знает, как правильно их отобразить ... Я даже поставил точку останова в слое java-службы, чтобы убедиться, что соответствующий объект отправляется назад, и это ... Но к тому времени, когда BlazeDS сериализует и десериализует его на гибкую сторону, это уже StartEvent. И мне интересно, как это можно исправить. Спасибо.

1 Ответ

1 голос
/ 26 марта 2011

Обычный способ сделать это - создать отдельный класс со свойством типа, а затем принять решение о том, что делать, основываясь на типе.

Что касается поведения BlazeDS: здесь не достаточно информации, чтобы знать наверняка, но если у вас один вызов метода java, возвращаемый объект всегда будет одного типа.Если у вас есть метод getEvent (), который возвращает объект sheduledEvent, то он всегда будет возвращать объект scheduleEvent.Если у вас есть два вызова метода - getScheduledEvent () и getStartEvent () - тогда у вас могут быть разные ответчики на гибкой стороне, и вы начнете свою отличную логику там.

...