#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. (Если кому-то интересно, просто свяжитесь со мной.) Теперь работает нормально.