В целях возможности разработки приложений парами (desktop-приложение и web-приложение, функционально не отличающиеся) решил использовать дополнительный слой в модели: веб-сервисы. Начал с технологии SOAP, которая по спецификации не предусматривает возможность пересылки объектов каких-то своих хитрых классов (custom classes).
На помощь пришли два класса XMLEncoder и XMLDecoder, которые позволяют записывать в и читать из XML экземпляры классов, которые имеют доступный конструктор без аргументов и геттеры/сеттеры для всех полей, значения которых необходимы для восстановления объекта.
Ниже приведу свой вспомогательный класс со статическими шаблонными методами, позволяющими перегонять объект в байт-массив, который разрешено по спецификации SOAP пересылать, и обратно.
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
public class Serializer {
public static byte[] toByte(T t) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
XMLEncoder e = new XMLEncoder(new BufferedOutputStream(baos));
e.writeObject(t);
e.close();
return baos.toByteArray();
}
public static T fromByte(byte[] bytes){
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
return (T) new XMLDecoder(bais).readObject();
}
}
Оригинал поста доступен
здесь