Удаленный объект в среде BlazeDS: сериализация объектов из классов, сгенерированных JAXB / XJC

#java #flash #serialization #marshalling #blazeds

#java #flash #сериализация #сортировка #blazeds

Вопрос:

Я разрабатываю веб-приложение с бэкэндом Java и интерфейсом Flash (чистый ActionScript) с использованием BlazeDS.

Я использую материал RemoteObject для отправки объектов, используя пользовательскую сериализацию, где мне нужно реализовать интерфейсы Externalizable (Java) и IExternalizable (AS). Пока это работает нормально.

Но теперь мне нужно отправить объекты из Java во Flash, классы которых сгенерированы с помощью JAXB / XJC. Конечно, эти сгенерированные классы Java не реализуют интерфейс Externalizable, поэтому кажется, что я не могу использовать здесь свой подход.

Одной из возможностей, по-видимому, является написание плагина XJC, который делает реализацию классов экстернализуемой. Но это выглядит как сложная работа…

У кого-нибудь есть хорошая идея, как решить эту проблему?

Комментарии:

1. Плагин наследования JAXB позволяет сгенерированным классам «реализовывать» интерфейсы, просто добавляя «implementate NameOfInterface» к определению класса. Для реализации необходимых методов необходимо разработать другой плагин.

2. В настоящее время я пытаюсь разработать плагин JAXB для этого. Это не кажется таким неприятным, как я думал раньше.

Ответ №1:

Пара вариантов:

  • создайте набор объектов поверх ваших классов, сгенерированных JAXB. Я бы выбрал этот вариант.
  • создайте прокси поверх ваших классов, сгенерированных JAXB, которые будут сериализовать / десериализовать соответственно каждый объект. Если ваши объекты реализуют экстернализуемый интерфейс, вы можете использовать API Dynamic Proxy из Java, нет необходимости в динамической генерации кода
  • измените дистрибутив blazeds. Я бы держался подальше от этого, но это выполнимо.

Комментарии:

1. Разве ваше первое предложение не означало бы снова реализовать классы, сгенерированные с помощью JAXB? И на самом деле я действительно не понимаю разницы между вашим первым и вторым предложением.

Ответ №2:

Я, наконец, разработал плагин JAXB / XJC. (Если кому-то интересно, просто свяжитесь со мной.) Теперь работает нормально.